Есть ли в git переключатель "Я - идиот", чтобы запретить push -f без ветки? - PullRequest
3 голосов
/ 30 сентября 2011

Я только что сделал

git push -f 

, не включая ветвь, которую я намеревался толкать и мерзнуть, просто взорвался во всем для моего репо.К счастью, мы могли бы собрать старые репозитории без особых проблем, но было бы неплохо, если бы я мог изменить настройку в git, чтобы предотвратить -f all или сделать так, чтобы я делал это явно.

Любой, кто знает опараметр, который я могу изменить для этого?

Ответы [ 3 ]

2 голосов
/ 30 сентября 2011

Вы можете установить хук pre-receive на удаленном репо, который может предотвратить принудительный толчок. Вы также можете убедиться, что принудительное нажатие может быть выполнено только при явном указании конкретной ветви.

Вы также можете настроить свой локальный репозиторий, чтобы изменить поведение по умолчанию git push, чтобы оно выдвигало только текущую ветвь:

Например, по умолчанию отправка только текущей ветви в начало используйте git config remote.origin.push HEAD. Любое действительное (например, в приведенных ниже примерах) можно настроить по умолчанию для git push origin.

0 голосов
/ 18 февраля 2014

Опция git push.default - это именно то, что вы ищете.
Из документации git по адресу http://git -scm.com / docs / git-config :

push.default

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

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

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

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

  • simple - в централизованном рабочем процессе работайте как восходящий поток с дополнительной безопасностью, чтобы отказаться от push, если имя вышестоящего филиала отличается от локального.
    При нажатии на пульт, отличный от того, с которого вы обычно тянете, работайте как ток. Это самый безопасный вариант и подходит для начинающих.
    Этот режим станет стандартным в Git 2.0.

  • соответствие - нажмите на все ветви с одинаковыми именами на обоих концах. Это заставляет репозиторий, который вы нажимаете, помнить набор ветвей, которые будут вытеснены (например, если вы всегда вставляете туда maint и master, а других веток нет, репозиторий, в который вы нажимаете, будет иметь эти две ветви, а ваши локальные maint и master будет толкаться там).
    Чтобы эффективно использовать этот режим, вы должны убедиться, что все ветви, которые вы выдвинули, готовы к выталкиванию, прежде чем запускать git push, так как весь смысл этого режима заключается в том, чтобы вы давили все ветви за один раз. Если вы обычно заканчиваете работу только с одной веткой и выталкиваете результат, в то время как другие ветки не завершены, этот режим не для вас. Также этот режим не подходит для отправки в общий центральный репозиторий, так как другие люди могут добавлять туда новые ветви или обновлять подсказки существующих ветвей вне вашего контроля.
    В настоящее время это значение по умолчанию, но Git 2.0 изменит значение по умолчанию на простое.

В вашей ситуации вы можете захотеть использовать git config --global push.default nothing , чтобы убедиться, что вы никогда ничего не отправляете без явного указания refspec.

0 голосов
/ 30 сентября 2011

Я не думаю, что есть настройка для этого. Но я согласен с тем, что ошибка может быть НЕ в том, что включает в себя название ветви и заставит всех перезаписать Если у Git была возможность, отключите -f, если ветка не указана. Может быть, я отправлю патч ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...