В чем разница между 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 ответа:
вы суммировали разницу в вашем вопросе.
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
страница справки. Явная восходящая настройка выполняется с помощью до