Git - В чем разница между push.default "matching" и "simple"

Я использую git какое-то время, но мне никогда не приходилось настраивать новое дистанционное репо, и мне было любопытно это делать. Я читал учебники, и я смущен тем, как получить "git push" для работы.

Если я просто использую git push, он просит меня увидеть ветвь по умолчанию (?), чтобы указать на? В чем разница между этими двумя вариантами, которые мне поставляет?

git config --global push.default matching
git config --global push.default simple

Совпадение просто подталкивает все ветки, которые у меня есть на моем локальном репо, и если они не совпадают, я должен вручную сказать, чтобы он нажимал любые новые локальные ветки, которые у меня есть, правильно? Лучше ли это использовать или просто проще?

Ответ 1

git push может выдвинуть все ветки или одну ветку в зависимости от этой конфигурации:

Нажмите на все ветки

git config --global push.default matching

Это подтолкнет все ветки к удаленной ветки и объединит их. Если вы не хотите выдвигать все ветки, вы можете нажать только текущую ветку.

Push только текущая ветка

git config --global push.default simple

Так что, на мой взгляд, лучше использовать эту опцию и продвигать ваш код по веткам. Лучше пихать ветки вручную и индивидуально.

Ответ 2

Из GIT документации: Git Документы

Ниже приведена полная информация. Короче говоря, simple будет только толкать current working branch и даже тогда, только если он также имеет то же имя на пульте дистанционного управления. Это очень хорошая настройка для новичков и станет по умолчанию в GIT 2.0

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

В моем личном использовании я обычно использую другой вариант: current, который подталкивает текущую рабочую ветвь (потому что я всегда ветвь для любых изменений). Но для новичка я предлагаю simple

push.default
Определяет действие GIT push, если нет refspec. явно дано. Различные значения хорошо подходят для конкретных технологические процессы; например, в чисто центральном рабочем процессе (то есть выборке источник равен целевому назначению), вверх по течению, вероятно, что вы хотите. Возможные значения:

ничего - не нажимайте ничего (ошибка), если refspec явно дано. Это в первую очередь предназначено для людей, которые хотят избежать ошибки, всегда будучи явными.

current - нажмите текущую ветвь, чтобы обновить ветку с тем же имя на принимающей стороне. Работает как в центральном, так и в нецентральном рабочие процессы.

вверх - нажмите текущую ветку назад на ветку, чьи изменения обычно интегрируются в текущую ветвь (которая называется @{Вверх}). Этот режим имеет смысл только в том случае, если вы вы, как правило, извлекаете из (например, центральный рабочий процесс).

простой - в централизованном рабочем процессе, работайте вверх по течению с добавленным безопасность, чтобы отказаться от нажатия, если имя ветки вверх по течению от локального.

При нажатии на пульт дистанционного управления, отличный от пульта, вы обычно тянуть, работать как ток. Это самый безопасный вариант и подходит для новичков.

Этот режим станет стандартным в GIT 2.0.

matching - нажимайте все ветки с одинаковым именем на обоих концах. Эта делает репозиторий, на который вы нажимаете, чтобы запомнить набор ветвей который будет вытолкнут (например, если вы всегда нажимаете maint и master там и никакие другие ветки, репозиторий, на который вы нажимаете, будет иметь эти две ветки, и ваш локальный maint и master будут нажаты там).

Чтобы эффективно использовать этот режим, вы должны убедиться, что все ветки вы выталкиваете, готовы быть вытолкнутыми перед запуском GIT push, поскольку весь смысл этого режима - позволить вам нажать все ветки в один конец. Если вы обычно завершаете работу только с одной веткой и выталкивать результат, в то время как другие ветки не завершены, этот режим не для тебя. Также этот режим не подходит для перехода в общий центральный репозиторий, поскольку другие люди могут добавлять туда новые ветки или обновите кончик существующих ветвей вне вашего контроля.

В настоящий момент это значение по умолчанию, но GIT 2.0 изменит значение по умолчанию на простой.

Ответ 3

Git v2.0 Замечания по выпуску

Примечания о обратной совместимости

Когда git push [$there] не говорит, что нажать, мы использовали традиционная "совпадение" семантики до сих пор (все ваши ветки были отправлены к удаленному, если уже есть ветки с тем же именем там). В Git 2.0 по умолчанию используется "простая" семантика, который подталкивает:

  • только текущая ветвь к ветки с тем же именем и только когда текущая ветвь настроена на интеграцию с этим удаленным если вы нажимаете на тот же пульт, который вы извлекаете; или

  • только текущая ветка к ветки с тем же именем, если вы нажимают на удаленный, который не находится там, где вы обычно выбираете.

Вы можете использовать конфигурационную переменную "push.default" для изменения это. Если вы старожил, который хочет продолжать использовать "совпадение" семантики, вы можете установить переменную в "соответствие", для пример. Прочтите документацию для других возможностей.

Когда git add -u и git add -A запускаются внутри подкаталога без указания путей, которые нужно добавить в командной строке, они работать со всем деревом для согласованности с git commit -a и другие команды (эти команды используются только для текущего подкаталог). Скажите git add -u . или git add -A ., если вы хотите ограничьте операцию текущим каталогом.

git add <path> теперь совпадает с git add -A <path>, так что git add dir/ заметят пути, которые вы удалили из каталога, и запишите удаление. В более старых версиях Git, git add <path> используется игнорировать удаление. Вы можете сказать git add --ignore-removal <path> добавьте только добавленные или измененные пути в <path>, если вы действительно этого хотите.