Автоматическая обрезка с помощью git fetch или pull
Если кто-то удалил удаленную ветку, потому что работа закончилась, и я не знаю, я не буду делать git fetch --prune
, и в конце концов я отброшу удаленную ветку.
Есть ли жизнеспособное решение для принудительного использования git для использования чернослива при извлечении/вытягивании без необходимости указывать его каждый раз?
Ответы
Ответ 1
git 1.8.5 (Q4 2013) предложит:
"git fetch
" (следовательно, "git pull
" ) научился проверять переменные конфигурации fetch.prune
"и" remote.*.prune
"и вести себя так, как если бы была задана опция командной строки" --prune
".
Это означает, что если вы установите для параметра remote.origin.prune значение true:
git config remote.origin.prune true
Любые git fetch
или git pull
будут автоматически обрезаться.
Примечание: Git 2.12 (Q1 2017) исправит ошибку, связанную с этой конфигурацией, что сделало бы git remote rename
неверным.
См. "Как переименовать удаленный Git?.
Подробнее в совершить 737c5a9:
Без "git fetch --prune
" ветки удаленного отслеживания для ветки, которую другая сторона уже удалила, останутся навсегда. Некоторые люди хотят всегда запускать "git fetch --prune
".
Чтобы разместить пользователей, которые хотят либо обрезать всегда, либо при извлечении с определенного пульта, добавьте две новые переменные конфигурации "fetch.prune
" и "remote.<name>.prune
":
- "
fetch.prune
" позволяет включить обрезку для всех операций выборки. - "
remote.<name>.prune
" позволяет изменять поведение на пульт.
Последнее, естественно, переопределяет первое, а параметр --[no-]prune
из командной строки переопределит настроенный по умолчанию.
Так как --prune
является потенциально разрушительной операцией (Git не сохраняет reflogs для удаленных ссылок еще), мы не хотим обрезать без согласия пользователя, поэтому эта конфигурация не будет включена по умолчанию.
Ответ 2
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 должно обрезать ветки удаленного отслеживания при выполнении выборки. Значение по умолчанию - "false".
remote.<name>.prune
& ЕПРС; Если установлено значение true, выборка из этого пула по умолчанию также удалит любые ссылки удаленного отслеживания, которые больше не существуют на удаленном компьютере (как если бы в командной строке была указана опция --prune
). Переопределяет настройки fetch.prune
, если таковые имеются.
Ответ 3
Если вы всегда prune
fetch
, я могу предложить использовать Aliases.
Просто введите git config -e
, чтобы открыть редактор и изменить конфигурацию для конкретного проекта и добавить раздел, например
[alias]
pfetch = fetch --prune
При извлечении с помощью git pfetch
черновик будет выполняться автоматически.