Как вы и подозревали, remote.<em>name</em>.push
относится только к указанному пульту name
. Если присутствует, он предоставляет refspec по умолчанию. Например, делать:
git config remote.zorg.push refs/heads/master:refs/heads/master
означает, что git push zorg
эквивалентно git push zorg refs/heads/master:refs/heads/master
.
Однако push.default
не не предоставляет ссылку по умолчанию, по крайней мере, напрямую. Может быть установлено одно из пяти значений:
nothing
: ошибка, не содержащая refspecs, является ошибкой
current
: push без указания refspecs означает «выдвинуть текущую ветвь в одноименную ветвь»
upstream
или tracking
: push без refspecs означает «протолкнуть текущую ветвь к ее восходящему потоку»
simple
: аналогично upstream
, но настройка восходящего потока должна совпадать с именем ветви
matching
: это самое сложное; см. ниже.
Обратите внимание, что tracking
устарело (вместо этого используйте upstream
). Ограничение для simple
заключается в том, что если ваша локальная ветвь имеет имя xyz
, восходящая ветвь также должна иметь имя xyz
на удаленном компьютере.
Настройка matching
означает, что:
- Получить список всех названий ветвей с пульта (см.
git ls-remote
output, ищите refs/heads/
).
- Для каждого такого имени ветви, если у вас также есть ветвь с тем же именем, добавьте это в список. Если нет, игнорируйте это.
- Используйте все полученные пары имен в качестве refspecs.
Этот режим был по умолчанию в версиях Git до Git 2.0, но он был довольно подвержен ошибкам, так что теперь это не так.