Для git push
существует много значений по умолчанию.Давайте начнем с четкого разделения различных частей синтаксиса.Синтаксис, сокращенно обозначенный интересующими вас частями, выглядит следующим образом:
git push [<em>options</em>] [<em>repository</em> [<em>refspec</em> ...]]
Аргумент repository
обычно является именем удаленного, например origin
, но может быть URL.Если в командной строке не указан аргумент repository
, то нельзя указать ни refspec
: для параметров добавляется тире, а для не с префиксом, начинающимся с тире, первое слово (разбитое на элементы argv
, независимо от того, что вызывает скомпилированные C-программы в рассматриваемой системе) - это хранилище, а дополнительные слова - это refspecs.Тем не менее, определенно возможно дать хранилище без указания refspec.Например, git push
не хватает обоих, в то время как git push origin
имеет репозиторий, но не хватает refspec.
Здесь нас интересует случай, когда refspec не в команделиния.Тем не менее, он работает так же, как когда refspec равен в командной строке - просто места, которые Git смотрит, чтобы найти некоторые refspec или refspecs, можно установить вconfiguration.
Допустим, что в командной строке указан репозиторий origin
, т. е. вы запустили git push origin
.Git, как вы сказали, проверит вашу конфигурацию, чтобы увидеть, есть ли у вас настройка remote.origin.push
.Скажем далее, что изначально:
git config --get remote.origin.push
печатает строку develop:benjamin_develop
.
Это refspec, который имеет как <src>
, так и :<dst>
части, поэтому Git рассматривает его какdevelop:benjamin_develop
.
Теперь предположим, что вы запустили:
git config remote.origin.push develop
, т.е. уберите часть :benjamin_develop
настройки.Затем вы снова запускаете git push origin
.Теперь подразумеваемое refspec просто develop
: в нем отсутствует :<dst>
часть.
Приведенный вами абзац довольно запутанный (он меня смутил), но после экспериментов - см. Комментарии ниже - мы обнаружили, что ондействует так же, как:
git push origin develop
в командной строке, которая действует так же, как:
git push origin develop:develop
, т. е. часть :<dst>
точно такая же, как :<src>
часть, независимо от текущей настройки push.default
.
(я думаю, что документация здесь может быть более ясной. Основная проблема заключается в том, что поведение Git сильно изменилось и со временем изменилось. Настройка remote.<remote>.push
несуществуют в более старых версиях Git, поэтому в какой-то момент, когда он был добавлен, кто-то должен был добавить соответствующий параграф в документацию. На данный момент документация в целом может быть реорганизована для устранения избыточности, но никто не сделалчто.)