Автоматическая чернослив с git fetch или pull
Если кто-то удалил удаленную ветку, потому что работа окончена, и я не знаю, я не буду делать git fetch --prune
и в конце концов я отодвину удаленную ветку.
Есть ли жизнеспособное решение для того, чтобы заставить git использовать режим обрезки при извлечении / извлечении без необходимости каждый раз указывать его?
4 ответа
Начиная с git 1.8.5 (4 квартал 2013 года):
"
git fetch
"(отсюда"git pull
"а) научился проверять"fetch.prune
" а также "remote.*.prune
"переменные конфигурации и вести себя как будто"--prune
msgstr "опция командной строки была указана.
Это означает, что если вы установите для 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 --prune
msgstr "ветки удаленного слежения за веткой, уже удаленной другой стороной, останутся навсегда.
Некоторые люди хотят всегда бежатьgit fetch --prune
".Чтобы приспособить пользователей, которые хотят всегда обрезать или извлекать данные с определенного пульта, добавьте две новые переменные конфигурации "
fetch.prune
" а также "remote.<name>.prune
":
- "
fetch.prune
msgstr "позволяет включить удаление для всех операций выборки.- "
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.