Git pre-receive hook

7

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.

    
Ralphz 03.04.2010, 01:40
quelle

3 Antworten

18

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%     
brool 03.04.2010, 03:04
quelle
9

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%
  1. Für jedes Paar (oldref, newref) müssen Sie alle Commits auflisten:

    %Vor%
  2. Für jedes Commit müssen Sie alle Dateien auflisten:

    %Vor%
  3. 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

  4. 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.

    
drizzo4shizzo 01.03.2013 15:16
quelle
1

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.

    
Vinay 02.02.2012 06:41
quelle

Tags und Links