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



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



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

506   3  
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

    Ничего не найдено.