Предупреждение: push.default не установлено; его неявное значение меняется в Git 2.0

Я уже давно пользуюсь Git и недавно скачал обновление только для того, чтобы найти это предупреждение, когда я пытаюсь push,

warning: push.default is unset; its implicit value is changing in 
Git 2.0 from 'matching' to 'simple'. To squelch this message 
and maintain the current behavior after the default changes, use: 

  git config --global push.default matching

To squelch this message and adopt the new behavior now, use: 

  git config --global push.default simple

Я могу установить одно из упомянутых значений, но что они значат? В чем разница между simple а также matching?

Если я изменю его на одном клиенте, нужно ли мне что-то делать на других клиентах, с которыми я делюсь репо?

4 ответа

Решение

Это подробно описано в документации, но я постараюсь подвести итог:

  • matching средства git push подтолкнет все ваши локальные филиалы к тем с одинаковым именем на пульте. Это позволяет легко нажать на ветку, которую вы не собирались.

  • simple средства git push будет толкать только текущую ветвь к той, которая git pull будет тянуть с, а также проверяет, совпадают ли их имена. Это более интуитивное поведение, поэтому значение по умолчанию меняется на это.

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

Я понимаю, что это старый пост, но, поскольку я столкнулся с той же проблемой и не смог найти ответ, я решил добавить немного.

Так что ответ @ Hammar правильный. С помощью push.default simple В некотором смысле это похоже на настройку отслеживания в ваших ветках, поэтому вам не нужно указывать удаленные узлы и ветви при толкании и вытягивании. matching Опция подтолкнет все ветви к их соответствующим аналогам на пульте по умолчанию (который является первым, который был настроен, если вы не настроили свое хранилище в противном случае).

Я надеюсь, что в будущем другие найдут для себя что-то полезное, что я запускал Git 1.8 на OS X Mountain Lion и никогда не видел этой ошибки. Обновление до Mavericks это то, что вдруг заставило его появиться (работает git --version покажет git version 1.8.3.4 (Apple Git-47) которого я никогда не видел до обновления ОС.

Если вы получили сообщение от git с жалобой на ценность simple в конфигурации, проверьте ваш git version,

После обновления XCode (на Mac Бег Mountain Lion), который также обновлен git с 1.7.4.4 до 1.8.3.4 оболочки запускались до того, как обновление все еще работало с git 1.7.4.4 и жаловались на значение simple для push.default в глобальном конфиге.

Решение состояло в том, чтобы закрыть оболочки, работающие на старой версии git и используйте новую версию!

Мне было интересно, почему я получаю это большое предупреждающее сообщение в Ubuntu 16.04 (который поставляется с Git 2.7.4), но не в Arch Linux. Причина в том, что предупреждение было удалено в Git 2.8 (март 2016 года):

При переходе к Git версии 2.0 пользователь получал довольно громкое предупреждение при запуске "git push" без установки переменной конфигурации push.default. Мы больше не предупреждаем, потому что переход был завершен давно.

Так что вы не увидите предупреждение, если у вас Git 2.8 и более поздние версии, и вам не нужно устанавливать push.default если вы не хотите изменить значение по умолчанию 'simple' поведение.

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

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

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

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

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

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

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

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

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

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

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

Этот режим станет по умолчанию в Git 2.0.

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

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

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

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