Что является результатом `git push origin`?
Я работал в своей локальной ветке, foo. Затем я хотел подтолкнуть эту новую ветку к источнику, чтобы другие могли работать над ней. Обычный способ сделать это:
git push origin foo:foo
Что я в итоге и сделал, и все получилось, как и ожидалось, подняв 61 объект. Прежде чем сделать это, я по прихоти попробовал:
git push origin
Подумав, может быть, по умолчанию будет создана новая удаленная ветка на основе имени моей локальной ветки. Выходной сигнал был обычным, только 13 объектов сдвинуты вверх. Результаты были незаметны. Ничего нового не появилось для других разработчиков или в моем локальном репо после получения.
Итак, что думает гад, я говорю это делать, когда я делаю git push origin
и как это отразилось на моем удаленном репо?
2 ответа
Это зависит от вашей версии git. В старой версии он будет пытаться оттолкнуть каждую местную ветвь, которая также присутствует на отдаленной стороне. Начиная с версии 1.6.3, поведение контролируется push.default
Вариант конфигурации.
Значения:
matching
: [по умолчанию] выдвинуть все ветви с одинаковым локальным и удаленным именемnothing
: push ничегоtracking
: только проталкивает текущую ветку, если она отслеживает удаленную веткуcurrent
: подтолкнет текущую ветку
Июнь 2012: [ANNOUNCE] Git 1.7.11.rc1
Новый режим для
push
, "simple
" Это нечто среднее между"current
" а также "upstream
", был введен.
"git push
msgstr "без каких-либо refspec вытолкнет текущую ветвь с тем же именем в удаленном хранилище, только когда она настроена на отслеживание ветки с тем же именем там.
Планируется сделать этот режим новым значением по умолчанию, если push.default не настроен.
Март 2012: Остерегайтесь: эта политика "соответствия" по умолчанию может скоро измениться
(через некоторое время после Git1.7.10 +):
Смотрите " Пожалуйста, обсудите: что должен делать" git push ", когда вы не говорите, что нужно нажимать? "
В текущих настройках (т.е.
push.default=matching
),git push
без аргумента будут выдвигать все ветви, которые существуют локально и удаленно, с одинаковыми именами.
Обычно это уместно, когда разработчик проталкивает свой собственный общедоступный репозиторий, но может сбивать с толку, если не опасно при использовании общего репозитория.Предложение состоит в том, чтобы изменить значение по умолчанию на
upstream
', т. е. нажмите только текущую ветвь и подтолкните ее к ветке, из которой git pull будет тянуть.
Другой кандидатcurrent
"; это толкает только текущую ветку к удаленной ветке с тем же именем.То, что обсуждалось до сих пор, можно увидеть в этой теме:
http://thread.gmane.org/gmane.comp.version-control.git/192547/focus=192694
Предыдущие соответствующие обсуждения включают в себя:
- http://thread.gmane.org/gmane.comp.version-control.git/123350/focus=123541
- http://thread.gmane.org/gmane.comp.version-control.git/166743
Чтобы присоединиться к обсуждению, отправьте свои сообщения по адресу: git@vger.kernel.org