2015-01-22 9 views
10

Git tajemniczo uruchamia odbiór śmieci "od czasu do czasu" i usuwa i osierocone zatwierdzenia, które masz.Jak zapobiec zbieraniu śmieci w GIT?

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

Naukowo, nastąpi to około 6-8 godzin, zanim sobie sprawę, że naprawdę potrzebne popełnienia który został właśnie usunięty.

Wolałbym, aby moje pliki nie zostały usunięte przez Git. Jak w ogóle wyłączyć automatyczne pobieranie śmieci?

+3

W standardowej konfiguracji, będzie go usunąć tylko rewizje, które zostały osierocone (czyli nie były dostępne z historii dowolnego oddziału) przez ponad 90 dni. Nie "usuwa plików". To przestaje zachowywać rzeczy, które * ty * usunąłeś kilka miesięcy temu. –

+1

Wiele razy mogę nieświadomie zniszczyć ścieżkę do zatwierdzenia i osierocić ją, wykonując rebase. Moim zamiarem nie jest usunięcie tych informacji. –

+3

Wystarczająco uczciwe - to rozsądna preferencja. Osobiście wolę przepływ pracy, który po prostu utrzymuje rzeczy, które mogą być mi potrzebne w historii. Sugerowałbym zwiększenie 'gc.reflogexpire' i przyjaciół także dla twojego przypadku użycia, ponieważ ułatwi to znajdowanie zaniechanego zatwierdzenia. Warto zauważyć, że nigdy nie uruchamianie czyszczenia pamięci może zmniejszyć wydajność gita. –

Odpowiedz

13

Z very same page you just linked to:

Niektóre polecenia git może automatycznie uruchomić git gc; zobacz flagę --auto poniżej, aby uzyskać szczegółowe informacje. Jeśli wiesz, co robisz i chcesz to aby wyłączyć tę funkcję na stałe bez dalszych rozważań, po prostu zrobić:

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

No nie jest to, że bilet –

+0

Wszystko to mówi mi to«bash: git: command not found» Używanie rozszerzeń git – Hatchling

+1

@Hatchling. Brzmi jak trzeba zainstalować git – SLaks

2

Innym podejściem, ostatnio udokumentowane w:
Documentation/config: wspomnieć " now "i" never "za 'wygaśnie' ustawienia

oprócz approxidate stylu wartości (" 2.months.ago "" yesterday „), konsumentów zmiennych konfiguracyjnych "gc.*expire*" również akceptuje i odniesieniu "now" ("zrób to natychmiast") i "never" ("całkowicie wyłączyć").

Zobacz commit 8cc8816 (28 lipca 2015) przez Eric Sunshine (sunshineco).
Sugerowane przez: Michael Haggerty (mhagger).
(Scalony przez Junio C Hamano -- gitster -- w commit 8cc8816, 28 lip 2015)

że oznacza to również uniknąć GC

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