2010-11-18 12 views
10

Używam Git do wersji serii plików binarnych. Kompresują się całkiem nieźle, ale moje centralne repozytorium nie wydaje się kompresować, kiedy popycham do nich. Zbierają przyzwoitą kwotę mojego limitu, więc szukałem sposobu, aby zmusić zdalne repo do zrobienia GC.Wymuszanie zdalnego reposowania na kompresję (GC) za pomocą Git

Czy to możliwe? Pracuję nad Project Locker, więc nie wierzę, że mam dostęp SSH, aby wejść i GC repo sobie. Jakieś pomysły? Dzięki.

+0

Czy masz dostęp do gitconfig pilota? – Cascabel

Odpowiedz

8

Jeśli nie możesz samodzielnie uruchomić usługi git gc, będziesz musiał oszukać ją automatycznie. Nie będziesz wtedy miał nad nim tak pełnej kontroli, ale powinieneś przynajmniej móc go uruchomić.

git gc --auto jest uruchamiany przez kilka poleceń; Odpowiedni tutaj jest pakiet receive-pack, który jest uruchamiany na pilocie, aby odebrać pakiet jako część push. gc --auto repacks tylko wtedy, gdy jest wystarczająco dużo luźnych obiektów; wartość graniczna jest określona przez parametr konfiguracyjny gc.auto, a domyślna wartość to 6700.

Jeśli masz dostęp do gitconfig pilota, możesz tymczasowo ustawić ten punkt odcięcia na 1. W repozytorium powinien znajdować się co najmniej 1 luźny obiekt, co powinno spowodować, że gc --auto zrobi to samo przy następnym naciśnięciu.

Jeśli nie masz dostępu do gitconfig pilota, jedyne co mogę zrobić, to stworzyć sztuczne luźne przedmioty. Można to zrobić, tworząc gałąź, wykonując kilka małych plików (z inną zawartością), przesuwając gałąź do pilota, a następnie usuwając gałąź z pilota. (Ważne, aby zmienić zawartość lub po prostu użyć tych samych obiektów BLOB.) Przepłucz i powtórz.

+0

Mogę spróbować zrobić małą aplikację, która wypompowuje około 7000 plików tekstowych. Nie wierzę, że mam dostęp do konfiguracji. Dam ci znać, jak to działa, dzięki! – jocull

+2

@ jocułk: 'seq 1 7000 | podczas czytania n; echo $ n> $ n.txt' – Cascabel

+0

Co to jest, skrypt powłoki? Tak czy inaczej, właśnie zrobiłem coś naprawdę szybkiego w Qt i wypchnąłem wszystkie luźne przedmioty. Nie wydawało się to wpływać na moje wykorzystanie przestrzeni. Muszę tylko spróbować skontaktować się z ProjectLocker i zobaczyć, co się dzieje. Dzięki za pomoc wszystkich. – jocull

1

Forma git-gcman page:

Niektóre polecenia git można automatycznie uruchomić git gc; zobacz flagę --auto poniżej, aby uzyskać szczegółowe informacje.

I dalej:

--auto

Dzięki tej opcji, kontrole git gc czy konieczne jest sprzątanie; jeśli nie, kończy pracę bez wykonywania żadnej pracy. Niektóre komendy git uruchamiają git gc --auto po wykonaniu operacji, które mogą tworzyć wiele luźnych obiektów.

Sprzątanie jest wymagane, jeśli w repozytorium znajduje się zbyt wiele luźnych obiektów lub zbyt wiele pakietów. Jeśli liczba luźnych obiektów przekracza wartość zmiennej konfiguracyjnej gc.auto, wówczas wszystkie luźne obiekty są łączone w jeden pakiet za pomocą git repack -d -l. Ustawienie wartości gc.auto na 0 wyłącza automatyczne pakowanie luźnych obiektów.

Jeśli liczba paczek przekracza wartość gc.autopacklimit, istniejące paczki (z wyjątkiem tych oznaczonych plikiem .keep) są konsolidowane w pojedynczym pakiecie za pomocą opcji -A opcji przepakowania git. Ustawienie gc.autopacklimit na 0 wyłącza automatyczną konsolidację pakietów.

I w końcu: komenda

GIT GC --auto uruchomi pre-auto-gc haka. Zobacz githooks (5), aby uzyskać więcej informacji.

2

To naprawdę problem, który trzeba rozwiązać po ich zakończeniu. Mogą to zrobić za pomocą haka post-receive lub crona lub czegoś podobnego, ale jeśli mają utrzymywać repozytoria, to jest to część z wielu powodów.

+1

Zgadzam się, choć czasami nie można czekać, aż inne osoby rozwiążą ich problemy. Możliwe też, że uruchamiają 'gc' przyzwoitą ilość, ale pliki binarne powodują, że rzeczy nadużywają się szybciej niż zwykle przy treści tekstowej. – Cascabel

+0

Jeśli nie mają GC, sprzedają mi więcej miejsca. Dla nich nie ma sensu, aby nie poszedł z biznesowego POV. – jocull

Powiązane problemy