2012-07-18 12 views
6

Posiadam centralne repozytorium gitów, które ja i kilku współpracowników regularnie pchamy i wyciągamy. W przeszłości popełniłem przypadkowo sporą binarną kropelkę, która wymaga ponownego przesłania w celu całkowitego usunięcia i jest uciążliwa dla wszystkich, więc chciałbym chronić się przed tym zdarzeniem w przyszłości. Czy jest możliwe ustawienie haka w zdalnym repozytorium, które sprawdzi rozmiar pliku, który ma zostać przekazany (czy są dodawane, czy aktualizowany jest istniejący plik) i odrzuca wypychania z plikami powyżej wielkości progowej, powiedzmy 2 MB?Jak chronić się przed popychaniem dużych bloków binarnych w git?

Co ważne chcę, aby istniejące pliki o rozmiarze większym niż 2MB były nietknięte, aby nie były tolerowane (więc nie należy odrzucać pliku, jeśli plik 2 MB znajduje się już w repozytorium, tylko wtedy, gdy naciśnięcie doda plik 2 MB lub zwiększy istniejący plik plik ma być 2MB). Ponadto chcę, aby hak był uruchamiany na zdalnej stronie, więc nie muszę się martwić, że klienci nie muszą mieć konfiguracji haka.

Edycja: Ponieważ naciśnięcie może zawierać wielokrotne zatwierdzenia, a nawet jedno zatwierdzenie z dużym plikiem powoduje jego zablokowanie w repozytorium, chcę zabezpieczyć się przed przeskokami, które zawierają/każdy commit/który rośnie do lub dodaje> = 2 MB plik.

Odpowiedz

5

Wygląda na to, że poprawne miejsce dla tego czeku to pre-receive hook. Ten hak wykonuje się po stronie serwera wypychania i ma dostęp do informacji wystarczających do wdrożenia sprawdzania rozmiaru pliku.

Hak ten jest wywoływany przez git-odbiorcze pakiet na zdalnym repozytorium, co się dzieje, gdy Push git odbywa się na lokalnym repozytorium. Tuż przed rozpoczęciem aktualizacji refs na zdalne repozytorium wywoływany jest hak pre-receive. Jego kod wyjścia określa sukces lub niepowodzenie aktualizacji.

+0

Przepraszam, wygląda na to, że chciałem wpisać pre-receive. Zaktualizuję. –

+0

Haczyk przed odebraniem ma miejsce przed "aktualizowaniem poprawek", co oznacza, że ​​jest zrobiony na tyle wcześnie, że jeśli mam niezerowe wyjście, rozmiar repo nie rośnie, lub tylko, że nie stosuje zatwierdzenia, pozostawiając plama wciąż tam jest sklonowana? Myślę, że czytam to ostatnie, ale nie mogę już znaleźć linku:/ –

+0

Jeśli nie wykonasz haka przed zatwierdzeniem, blob nadal będzie obecny na serwerze, ale to nie oznacza automatycznie, że zostanie sklonowany. Nie będzie można go uzyskać z żadnego z serwerów, więc Git zignoruje go. W końcu Garma zbiera śmieci, usuwając blob bez referencji. –

Powiązane problemy