Автоматическая обрезка с помощью 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 черновик будет выполняться автоматически.