2013-03-09 9 views
8

Próbuję egzekwować niektóre zasady kodowania w moim zespole. W tym celu napisałem kilka haków po stronie klienta, które działają poprawnie, ale teraz chcę, aby te same kontrole były uruchamiane, gdy programista przesyła modyfikacje do centralnego repozytorium. Ale one nie działają.Haczyk serwera Git: czy zawartość plików jest wypychana?

Oto, co chcę zrobić:

chcę przemierzać popychane pliki linia po linii, należy sprawdzić kodowanie łamania konwencji i jeśli znajdę w ogóle odrzucić push, również pokazujący numery linii + naruszeń.

W moim pre-commit po stronie klienta, udało mi się zrobić wywołując git diff --cached --name-status --diff-filter=AM aby otrzymać listę zmienionych plików, a git cat-file -p :filename dla każdego z plików pobranych w pierwszym naborze, aby cały tekst plików.

Kiedy próbuję zrobić to samo w moim haku po stronie serwera update, otrzymuję pusty ciąg (dla listy plików).

Próbowałem też dzwoniąc git show --pretty="format:" --name-only newrev (gdzie newrev jest SHA otrzymuję jako parametr do haka aktualizacji, git diff-tree -r --name-only --no-commit-id <tree-ish> i niektórych innych rzeczy znaleźć w internecie, ale nie mogę się jasne zrozumienie tego, co się dzieje i co powinienem zadzwonić.

czy możesz mi pomóc?

+0

Jakie są zalety korzystania z 'git Cat-file' nad' cat'. Próbowałem wyszukiwać, ale nie mogłem udowodnić ważnego powodu. –

Odpowiedz

4

trzeba dokonać zmian w scenariuszu, bo nie ma kopii roboczej po stronie serwera, a git diff --cached prace z obszaru pomostowego (lub indeksu) podczas gdy twój indeks jest pusty, gdy serwer otrzymuje push.

Po prostu użyj git diff --name-status <sha-old> <sha-new> zamiast tego, z sha-old i sha-new jako refs wysyłanymi do hooków jako argumentem, a otrzymasz te same wyniki co przed uruchomieniem git diff --cached.

chodzi o sprawdzenie zawartości pliku, można użyć git-show sha-new:/path/to/file

+0

O dziwo, wciąż mam pusty ciąg ... Nie wiem, czy to ma znaczenie, ale wciskam się w pustego pilota, a kiedy popycham, git mówi, że to "Pisanie 27 obiektów", to wydaje się, że Push nie jest pusty. – Ibolit

+0

Po naciśnięciu mojego pierwszego zatwierdzenia, teraz mogę nacisnąć i otrzymuję listę plików. Wielkie dzięki! – Ibolit

Powiązane problemy