Git установить пульт для всех веток без нажатия - PullRequest
0 голосов
/ 05 октября 2018

Есть ли какая-нибудь команда git для установки удаленного репозитория для ветки (идеально для всех) в локальном репозитории, не нажимая коммиты с локальной формы на удаленную? Короче,

все, что я хочу получить может бытьсделано с помощью флага --all: git push --all

, опционально с настройкой восходящих потоков -u: git push --all -u

, но я не хочу выдвигать какие-либо коммиты.

Желаемый результат - просто установить связь между локальным и удаленным репозиторием для git push, поэтому, если вы git push в будущем, вам не нужно будет указывать удаленный, а также вы можете пропустить опцию --all.

1 Ответ

0 голосов
/ 05 октября 2018

Для одной ветки см. Вопрос phd, связанный с , т.е. Сделать существующую ветку Git отслеживающей удаленную ветвь?

Чтобы сделать это для некоторыхмножество веток, используйте петлю.Чтобы сделать это для всех ветвей, используйте git for-each-ref для циклического перебора всех ветвей, как в этой конструкции цикла sh / bash:

git for-each-ref --format='%(refname:short)' |
    while read name; do
        git branch --set-upstream-to=origin/$name $name
    done

(которая в действительности является одной строкой, просто разбитой на более читаемые строкиздесь).

Предполагается, что для каждого name имя восходящего потока должно быть origin/<em>name</em>.Если нет, заменить соответствующим образом. Обратите внимание, что это переопределит любой существующий восходящий набор для каждого такого имени или завершится неудачей, если еще нет восходящего потока с этим именем.

Если origin/xyzzy еще не существует, вы не можете установить ответвлениеxyzzy иметь origin/xyzzy в качестве восходящего потока.Это совершенно логично.Однако, это может быть не то, что вам нужно.

Вы можете переопределить интеллект Git по этому поводу, опустившись ниже уровня git branch, заменив git branch --set-upstream-to на необработанные git config операции:

git for-each-ref --format='%(refname:short)' |
    while read name; do
        git config branch.$name.remote origin
        git config branch.$name.merge refs/heads/$name
    done

Предполагается, что ваш remote.origin.fetch параметр +refs/heads/*:refs/remotes/origin/*.Если это не так, вы уже должны знать, что вы делаете и как изменить вышеприведенный цикл.

Обратите внимание, что установка восходящего потока на несуществующее имя удаленного слежения заставит Git поверить, что имя использовалось и существовало, итеперь отсутствует: git branch -vv сообщит об исходящем потоке как "ушел".Git не очень хорошо разбирается в причинности, поэтому считает, что если для восходящего потока задана несуществующая ветвь, то причинная последовательность должна была быть:

  1. существует восходящий поток
  2. установлен восходящий поток ветвик существующему восходящему потоку
  3. восходящий поток удаляется, в результате чего восходящий поток филиала был установлен ненадлежащим образом

, хотя на самом деле действительной причиной было неправильное установление восходящего потока с целью , в ожидании настройки , которая станет подходящей в будущем .Так что игнорируйте аннотацию «ушёл».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...