Ich versuche einige Codierungsregeln in meinem Team durchzusetzen. Zu diesem Zweck habe ich eine Reihe von clientseitigen Hooks geschrieben, die gut funktionieren, aber jetzt möchte ich, dass die gleichen Überprüfungen ausgeführt werden, wenn ein Entwickler seine Änderungen an das zentrale Repository weiterleitet. Aber sie funktionieren nicht.
Hier ist was ich tun möchte:
Ich möchte die gedrückten Dateien zeilenweise durchlaufen, nach Codierungskonventionen suchen und, wenn ich welche finde, den Push ablehnen und auch die Zeilennummern + Verletzungen anzeigen.
In meinem Pre-Commit-Client-Side-Hook konnte ich dies tun, indem ich git diff --cached --name-status --diff-filter=AM
aufruft, um die Liste der modifizierten Dateien zu erhalten, und git cat-file -p :filename
für jede der Dateien, die beim ersten Aufruf abgerufen wurden, um den gesamten Text zu erhalten die Dateien.
Wenn ich versuche, dasselbe in meinem Server-seitigen update
Hook zu tun, erhalte ich eine leere Zeichenkette (für die Liste der Dateien).
Ich habe auch versucht, git show --pretty="format:" --name-only newrev
aufzurufen (newrev ist die SHA, die ich als Parameter für den Update-Hook, git diff-tree -r --name-only --no-commit-id <tree-ish>
, und einige andere Dinge, die ich im Netz finde, bekomme, aber ich verstehe nicht, was ich verstehe was ist los und was ich nennen soll.
Können Sie mir helfen?
Sie müssen Änderungen an Ihrem Skript vornehmen, da es auf der Serverseite keine Arbeitskopie gibt und git diff --cached
mit einem Staging-Bereich (oder Index) arbeitet, während Ihr Index leer ist, wenn der Server einen Push erhält.
Verwenden Sie stattdessen einfach git diff --name-status <sha-old> <sha-new>
, wobei sha-old
und sha-new
die Refs sind, die an die Hooks als Argument gesendet werden, und Sie erhalten die gleiche Ausgabe wie beim Ausführen von git diff --cached
vor einem Commit.
Zum Überprüfen des Dateiinhalts können Sie git-show sha-new:/path/to/file