Aktualizacja: git prune
„rozwiązałoby” problem, ponieważ usunie te luźne przedmioty
( git gc
połączenia git prune
, ale domyślnie tylko w przypadku luźnych przedmiotów starszych niż dwa tygodnie).
Jednak, jak wspomina OP Michael Donohue w komentarzach:
Podoba mi się aspekt bezpieczeństwa polegający na przechowywaniu luźnych przedmiotów przez dwa tygodnie, gdybym chciał wrócić i spojrzeć na niektóre stare wersje, więc nie podoba mi się to rozwiązanie.
Nie mam żadnych problemów z rozmiarem ani wydajnością gita, to po prostu „git gui” nalega na proszenie mnie o skompresowanie bazy danych, nawet jeśli kompresja bazy danych nie przyniesie żadnego efektu.
Oryginalna odpowiedź:
Problem z " git gc
" nieusuwaniem wszystkich luźnych obiektów został już zgłoszony (koniec 2008 r., " " git gc
"Nie wydaje się już usuwać luźnych obiektów "
git gc
usuwa tylko luźne przedmioty starsze niż dwa tygodnie, jeśli naprawdę chcesz je teraz usunąć, uruchom git prune.
Ale upewnij się, że żaden inny proces git nie może być aktywny, gdy go uruchomisz, lub może on nadepnąć na coś.
" git gc
" rozpakuje obiekty, które stały się nieosiągalne i były obecnie w paczkach.
W rezultacie, ilość miejsca na dysku używane przez repozytorium git może faktycznie się dramatycznie po „ git gc
” operacji, co może być zaskakujące dla kogoś, kto jest uruchomiony niemal w pełni na swoim systemie plików, usuwa szereg gałęzi z repozytorium śledzenia , a następnie „ git gc
” może spowodować bardzo nieprzyjemną niespodziankę.
[
Przykład: ]
Stare gałęzie są rezerwowane za pomocą tagu, takiego jak next-20081204
.
Jeśli codziennie aktualizujesz lokalną kopię linux-next
repozytorium, zgromadzisz dużą liczbę starych znaczników gałęzi.
Jeśli następnie usuniesz całą ich serię i uruchomisz git-gc
, operacja zajmie trochę czasu, a liczba używanych bloków i i-węzłów znacznie wzrośnie.
Znikną po " git prune
", ale kiedy wykonuję tę operację porządkową, często marzyłem o --yes-I-know-what-I-am-doing-and-it's-unsafe-but-just-drop-the-unreachable-objects-cause-this-is-just-a-tracking-repository
opcji "git gc".
Więc w twoim przypadku, czy „ git prune
” byłoby pomocne?
(prawdopodobnie z użyciem „now” w gc.pruneexpire
zmiennej konfiguracyjnej, potrzebnej do wystąpienia powyższego zachowania).
Masz również (z tego samego wątku):
repack -a -d -l
Zwróć uwagę na małą literę „a”.
git-gc
wywołuje repack z wielkimi literami „A”, co powoduje rozpakowanie nieosiągalnych obiektów. Małe „a” jest dla ludzi, którzy wiedzą, co robią i chcą, aby git po prostu upuścił nieosiągalne obiekty.