Wenn Sie den pre-receive-Hook für das Git-Repository aktivieren:
Es braucht keine Argumente, aber damit jeder Verweis aktualisiert wird, erhält er bei der Standardeingabe eine Zeile des Formats:
& lt; alter Wert & gt; SP & lt; neuer Wert & gt; SP & lt; Ref-Name & gt; LF
wo & lt; alter Wert & gt; ist der alte Objektname, der im ref gespeichert ist, & lt; neuer Wert & gt; ist der neue Objektname, der in der Referenz gespeichert werden soll und der vollständige Name der Referenz ist. Beim Erstellen eines neuen Verweises, & lt; alter Wert & gt; ist 40 0.
Kann mir jemand erklären, wie ich alle Dateien überprüfe, die im Repository geändert werden, wenn ich diesen Commit erlaube?
Ich möchte diese Dateien durch einige Skripts ausführen, um die Syntax usw. zu überprüfen.
Danke.
Seltsamerweise hatte ich etwas Code, der von einem git herumlag - & gt; Wordpress-Dienstprogramm, das helfen könnte. Im Folgenden erhalten Sie eine Liste aller im Empfang geänderten Dateien sowie deren Inhalt. Keine Garantien, vielleicht Bugs, möglicherweise nicht die effizienteste Art, es zu tun, bla bla bla. Ein Teil dieses Codes basiert auf Sachen in gitshelve , was wirklich eine tolle Sache ist, wenn man nach generischen sucht git maniuplation.
%Vor%Ich habe das gerade getan. Hier ist der grundlegende Fluss, den ich verwendet habe.
Lesen Sie in Ihrem pre-receive-Hook jede Zeile von stdin, die (wie Sie sagten) wie folgt aussieht:
%Vor%Für jedes Paar (oldref, newref) müssen Sie alle Commits auflisten:
%Vor%Für jedes Commit müssen Sie alle Dateien auflisten:
%Vor%Um eine Datei zu untersuchen, verwenden Sie git show:
%Vor%machen Sie die Überprüfung der Dateiinhalte hier. Wenn Sie den Benutzer über ein Problem informieren möchten, schreiben Sie an stderr
Nach dem Iterieren aller Refs, Commits und Dateien beende den Wert ungleich Null, um den Push zurückzuweisen, oder null, um ihn zuzulassen
Beachten Sie, dass bei dieser Vorgehensweise alle Commits in der richtigen Reihenfolge ausgeführt werden. Wenn also eine Datei in mehreren Commits geändert wird, wird jede Version geprüft. Wenn Sie jede Datei nur einmal ansehen möchten, durchlaufen Sie die Commits stattdessen in umgekehrter Reihenfolge und untersuchen Sie eine Datei nicht zweimal. Ich empfehle den ersten Ansatz jedoch, so dass alle Versionen von Push-Dateien untersucht werden.
Wenn Sie wissen möchten, ob die Berechtigungen der Dateien im lokalen Repository geändert werden, bevor Sie zum Remote-Repository wechseln, führen Sie git ls-tree -r commit
aus, wobei commit der SHA-Commit-Wert des lokalen Repository ist.
Dieser Befehl gibt eine Liste von Dateien mit ihren Berechtigungen, die analysiert werden können, um zu prüfen, ob die Berechtigung einer Datei vor dem Drücken geändert wird.
Tags und Links git