Переименуйте git remote name в "upstream"

У меня небольшая проблема с настройкой Git. Я работаю с разветвленными хранилищами довольно часто. Чтобы раскошелиться на них, я использую кнопку на GitHub. После этого команда git remote -v показывает мне "происхождение" и "оригинал-имя пользователя".

"original-username" теперь является веткой upstream, из которой я могу извлекать изменения и создавать запросы извлечения. Я хотел бы, чтобы это назвали "вверх по течению", хотя. Это облегчит использование одних и тех же команд на разных вилах, и я даже могу создать псевдонимы с этим.

Так что я знаю, что могу изменить имя удаленного с git remote rename original-username upstream, но это означало бы, что я должен делать это для каждой вилки, каждый раз, когда я получаю эту вилку на машине, и мне нужно сначала сделать git remote -v и т. д., и я ленив:P
Кроме того, оригинал-имя пользователя отличается на каждой вилке.

Итак, мой вопрос:
Есть ли возможность переименовать удаленную ветку (из разных имен) в восходящую, возможно, с помощью классной функции псевдонима или небольшого скрипта?

Моя мечта будет примерно такой:

[alias]
    setupstream = "!f(){ git remote rename $oldupstream upstream; };f"

$oldupstream должен быть получен автоматически, каким-то образом.

1 ответ

Решение

Делая предположение, что в локальном репозитории будут настроены только два удаленных, где один origin а другой - тот, который вы хотите переименовать, что-то вроде этого должно работать.

setupstream = "!f() { \
    local rem=$(git remote | grep -v '^origin$'); \
    if [ \"$(wc -l <<<\"$rem\")\" -gt 1 ]; then \
        echo 'Too many remotes.' >&2; \
        return; \
    fi; \
    if [ -z \"$rem\" ]; then \
        echo 'No non-origin remote found.' >&2; \
        return; \
    fi; \
    if [ \"$rem\" = upstream ]; then \
        echo '\"upstream\" remote already exists.'; \
        return; \
    fi; \
    git remote rename \"$rem\" upstream; \
    echo \"Renamed $rem to upstream.\"; \
}; f"
Другие вопросы по тегам