Автоматический чернослив с git fetch или pull
Если кто-то удалил удаленную ветку, потому что работа закончена, и я не знаю, я не буду делать git fetch --prune и в конце концов я отодвину удаленную ветку.
есть ли жизнеспособное решение для принуждения git использовать режим обрезки при извлечении / вытягивании без необходимости указывать его каждый раз?
3 ответов:
начиная с git 1.8.5 (Q4 2013):
"
git fetch" (отсюда и "git pull"а также) научился проверять"fetch.prune" и "remote.*.prune" переменные конфигурации и вести себя так, как если "--prune" был задан параметр командной строки.это означает, что если вы установите пульт.происхождение.чернослив к истине:
git config remote.origin.prune trueлюбой
git fetchилиgit pullавтоматически чернослив.Примечание: Git 2.12 (Q1 2017) исправит ошибку, связанную с этим конфигурация, которая бы сделала
git remote renameбезобразничать.
Смотрите "как переименовать git remote?".
на commit 737c5a9:
без "
git fetch --prune", удаленные ветви для ветви, которую уже удалила другая сторона, останутся навсегда.
Некоторые люди хотят всегда бежать"git fetch --prune".для размещения пользователей, которые хотят либо обрезать всегда или при извлечении из конкретного удаленный, добавьте две новые переменные конфигурации"
fetch.prune" и "remote.<name>.prune":
- "
fetch.prune" позволяет включить чернослив для всех операций выборки.- "
remote.<name>.prune" позволяет изменить поведение на пульте дистанционного управления.последнее, естественно, будет переопределять первое, а
--[no-]pruneопция из командной строки переопределит настроенное значение по умолчанию.С
--pruneявляется потенциально разрушительной операцией (Git не сохраняет reflogs для удаленных ссылок пока), мы не хотим обрезать без согласия пользователей, поэтому эта конфигурация не будет включена по умолчанию.
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для параметров записи: запись в global
~/.gitconfigфайл, а не репозиторий.git/configпишите на нет.
--localдля параметров записи: запись в репозиторий . Это значение по умолчанию поведение.
fetch.pruneесли true, fetch будет автоматически вести себя так, как если бы
--pruneопция была дана в командной строке. Смотрите такжеremote.<name>.prune.
gui.pruneDuringFetch"истина", если git-gui следует обрезать ветви удаленного отслеживания при выполнении выборки. Значение по умолчанию "ложный."
remote.<name>.pruneесли установлено значение true, извлечение из этого пульта по умолчанию также удалит все ссылки удаленного отслеживания, которые больше не существуют на пульте (как если бы
--pruneопция была дана в командной строке). Переопределяетfetch.pruneнастройки, если таковые имеются.
если вы хотите всегда
pruneкогда выfetch, Я могу предложить использовать псевдонимы.просто типа
git config -eоткрыть редактор и изменить конфигурацию для конкретного проекта и добавить что-то вроде[alias] pfetch = fetch --pruneкогда вы приносите с
git pfetchчернослив будет сделано автоматически.
Comments