2015-01-22 3 views
10

Git загадочно запускает сбор мусора «время от времени» и удаляет и осиротевшие коммиты у вас есть.Как предотвратить сбор мусора в GIT?

https://www.kernel.org/pub/software/scm/git/docs/git-gc.html

С научной точки зрения это будет происходить примерно 6-8 часов, прежде чем вы осознаете действительно необходимо, что совершить, который был просто удален.

Я бы предпочел, чтобы мои файлы не были удалены Git. Как я могу отключить автоматическую сборку мусора?

+3

В стандартной конфигурации, то это будет только удалить коммиты, которые были сиротами (то есть не были доступны из истории любого филиала) более 90 дней. Он не «удаляет ваши файлы». Он перестает сохранять вещи, которые * вы * удалили несколько месяцев назад. –

+1

Много раз я мог бы невольно уничтожить путь к фиксации и осиротеть его, выполнив rebase. Я не хочу удалять эту информацию. –

+3

Достаточно честный - это разумное предпочтение. Я лично предпочитаю рабочий процесс, который просто держит вещи, которые мне все еще могут понадобиться в истории. Я бы предложил увеличить gc.reflogexpire и друзей, а также для вашего варианта использования, так как это облегчит поиск оставленных коммитов. Стоит отметить, что никогда не запущенная сборка мусора может снизить производительность git. –

ответ

13

От very same page you just linked to:

Гаденыш команды могут автоматически запускать Git дс; подробнее см. флаг -auto. Если вы знаете, что вы делаете, и все, что вы хотите, чтобы отключить этот режим навсегда без дальнейших рассуждений, просто сделать:

$ git config --global gc.auto 0 
+0

Ну не то, что билет –

+0

Все это говорит мне„Баш: мерзавец: команда не найдена“ Использование расширений GIT – Hatchling

+1

@Hatchling:. Похоже, вам нужно установить мерзавца – SLaks

2

Другой подход, недавно документированы в:
Documentation/конфигурации: говоря " now "и" never "для 'истекает' Настройка

в дополнении к approxidate стиля значения (" 2.months.ago "" yesterday «), потребители переменных конфигурации «gc.*expire*» также принимают и уважать «now» («сделать это немедленно») и «never» («подавить полностью»).

См. commit 8cc8816 (28 июля 2015 года) от Eric Sunshine (sunshineco).
Предложен: Michael Haggerty (mhagger).
(слиты Junio C Hamano -- gitster -- в commit 8cc8816, 28 Июль 2015)

Это означает, что это было бы также предотвратить дс:

git config --global gc.pruneExpire never 
git config --global gc.reflogExpire never