Автоматическая чернослив с git fetch или pull

Если кто-то удалил удаленную ветку, потому что работа окончена, и я не знаю, я не буду делать git fetch --prune и в конце концов я отодвину удаленную ветку.

Есть ли жизнеспособное решение для того, чтобы заставить git использовать режим обрезки при извлечении / извлечении без необходимости каждый раз указывать его?

4 ответа

Решение

Начиная с git 1.8.5 (4 квартал 2013 года):

"git fetch"(отсюда"git pull"а) научился проверять"fetch.prune" а также "remote.*.prune"переменные конфигурации и вести себя как будто"--prunemsgstr "опция командной строки была указана.

Это означает, что если вы установите для remote.origin.prune значение true:

git config remote.origin.prune true

любой git fetch или же git pull автоматически подрежет.

Примечание: Git 2.12 (Q1 2017) исправит ошибку, связанную с этой конфигурацией, которая сделает git remote rename безобразничать.
Смотрите " Как мне переименовать GIT Remote?".


Смотрите больше на коммите 737c5a9:

Безgit fetch --prunemsgstr "ветки удаленного слежения за веткой, уже удаленной другой стороной, останутся навсегда.
Некоторые люди хотят всегда бежатьgit fetch --prune".

Чтобы приспособить пользователей, которые хотят всегда обрезать или извлекать данные с определенного пульта, добавьте две новые переменные конфигурации "fetch.prune" а также "remote.<name>.prune":

  • "fetch.prunemsgstr "позволяет включить удаление для всех операций выборки.
  • "remote.<name>.prune"позволяет изменить поведение на пульте.

Последний естественно переопределит первый, а --[no-]prune опция из командной строки переопределит настроенный по умолчанию.

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

git config --global fetch.prune true

Чтобы всегда --prune за git fetch а также git pull во всех ваших репозиториях Git:

git config --global fetch.prune true

Эта команда добавляется в вашу глобальную конфигурацию Git (обычно ~/.gitconfig) следующие строки. использование git config -e --global для просмотра вашей глобальной конфигурации.

[fetch]
    prune = true

git config remote.origin.prune true

Чтобы всегда --prune но из одного репозитория:

git config remote.origin.prune true
                 #^^^^^^
                 #replace with your repo name

Эта команда добавляет в вашу локальную конфигурацию Git (обычно .git/config) последняя строка ниже использование git config -e для просмотра вашей локальной конфигурации.

[remote "origin"]
    url = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    fetch = +refs/heads/*:refs/remotes/origin/*
    prune = true

Вы также можете использовать --global во второй команде или используйте вместо --local в первой команде.


git config --global gui.pruneDuringFetch true

Если вы используете git gui Вы также можете быть заинтересованы в:

git config --global gui.pruneDuringFetch true

что добавляет:

[gui]
    pruneDuringFetch = true

Рекомендации

Соответствующая документация от git help config:

--global

Для написания опций: пишите в глобальный ~/.gitconfig файл, а не хранилище .git/config, написать в $XDG_CONFIG_HOME/git/config файл, если этот файл существует и ~/.gitconfig файл не

--local

Для написания опций: пишите в хранилище .git/config файл. Это поведение по умолчанию.

fetch.prune

Если true, выборка будет автоматически вести себя так, как будто --prune опция была дана в командной строке. Смотрите также remote.<name>.prune,

gui.pruneDuringFetch

"true", если git-gui должен удалять ветви удаленного отслеживания при выполнении выборки. Значение по умолчанию неверно".

remote.<name>.prune

Если установлено значение true, выборка с этого пульта по умолчанию также удалит все ссылки на удаленное отслеживание, которые больше не существуют на пульте (как будто --prune опция была дана в командной строке). Переопределение fetch.prune настройки, если таковые имеются.

Если вы хотите всегда prune когда ты fetchМогу предложить использовать псевдонимы.

Просто введите git config -e чтобы открыть свой редактор и изменить конфигурацию для конкретного проекта и добавить раздел, как

[alias]
pfetch = fetch --prune   

когда вы получаете с git pfetch обрезка будет сделана автоматически.

и в конце концов я верну удаленную ветку

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

См. /questions/42769980/povedenie-git-push-po-umolchaniyu-bez-ukazaniya-vetki/42770002#42770002 для некоторых рекомендаций о том, как настроить параметры push в вашем репозитории git.

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