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

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

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

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

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

163
задан Josh 18 февр. '14 в 0:30
источник поделиться
3 ответов

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

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

git config --global push.default matching

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

Нажмите только текущую ветвь

git config --global push.default simple

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

Для дальнейшего чтения перейдите к сообщению

207
ответ дан Lalit Sachdeva 19 февр. '14 в 0:06
источник поделиться

Из 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 изменит значение по умолчанию на простой.

77
ответ дан UpAndAdam 19 февр. '14 в 1:26
источник поделиться

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>, если вы действительно этого хотите.

1
ответ дан CodeWizard 01 янв. '16 в 1:33
источник поделиться

Другие вопросы по меткам