В чем разница между git push.по умолчанию=ток и толчок.по умолчанию=вверх по течению?


на странице man для git-config перечислены эти параметры для push.по умолчанию:

nothing - do not push anything.
matching - push all matching branches. All branches having the same name in both ends are considered to be matching. This is the default.
upstream - push the current branch to its upstream branch.
tracking - deprecated synonym for upstream.
current - push the current branch to a branch of the same name.

в большинстве случаев я бы предположил, что нажатие на восходящую ветвь ветви будет таким же, как и нажатие на ветвь с тем же именем, поскольку восходящая ветвь обычно имеет то же имя, и поскольку ветвь с тем же именем ("текущая") обычно (или всегда, по определению?) быть выше по течению. Так в чем же разница?

обновление: man-страница для git-config был обновлен (как и следовало ожидать), поэтому различия сделаны здесь теперь может быть намного яснее.

2 83

2 ответа:

вы суммировали разницу в вашем вопросе. upstream подталкивает к настроить ветка вверх по течению, в то время как current предполагает, что восходящая ветвь имеет то же имя, что и настоящее локальная ветвь, и толкает к этому конкретному имени. На самом деле нет никаких оснований предполагать, что восходящая ветвь отслеживания локальной ветви имеет то же имя, что и сама локальная ветвь.

например, если вы работаете в нескольких репозиториях или во многих общая разработчики пультов дистанционного управления, вы часто в конечном итоге отслеживать различные вилки одной и той же ветви, такие как allen-master или susan-master, оба из которых отслеживать master филиал в репо Аллена и Сьюзен, соответственно. В этом случае current было бы неправильной настройкой, потому что эти имена ветвей не существуют на их пультах дистанционного управления. upstream, однако, будет работать нормально.

более практическим примером может быть отслеживание как A development и production репозитория. Рабочий процесс может использовать другую магистраль ветка для каждого, но это может запутать. Предположим, вы были интегратором кода и хотели отслеживать оба репозитория master филиалы отдельно.

git checkout -b production --track production/master
git checkout -b development --track development/master

теперь у вас есть две ветви, которые отслеживают свои соответствующие репозитории, ни один из которых не использует master соглашение об именах вообще. Существует небольшая путаница в названиях ветвей: они явно описывают то, что они отслеживают. Тем не менее, push.default = current не имеет никакого смысла, поскольку ни один пульт не содержит development или production отделение.

current будет толкать текущей ветки в ветку с тем же именем на удаленном РЕПО.

upstream подтолкнет текущую ветвь к восходящей ветви.

восходящая ветвь-это ветвь, которая была явно или неявно определена как восходящая от вашей текущей ветви. Это означает, что push и pull по умолчанию будут синхронизироваться с этой веткой. Восходящая ветвь может находиться в том же РЕПО, что и сама текущая ветвь. Вы можете делать интересные вещи, такие как установите свой local главная ветвь как вверх по течению от вашего local объект (тему) филиала, а также толкать и тянуть между ними.

неявная восходящая настройка выполняется через branch.autosetupmerge значение конфигурации. Вы можете найти документацию в git config страница справки. Явная восходящая настройка выполняется с помощью до