Wie bekomme ich eine Liste von eingehenden Commits auf git Push für einen neuen Zweig in einem Hook

8

Ich schreibe einen Pre-Receive-Hook, um eine Bestätigung zu geben, bevor ich Commits auf dem Push akzeptiere. Es funktioniert gut mit vorhandenen Zweigen, da ich den folgenden Git-Befehl verwende, um eine Liste von zu erhalten eingehende Commits:

%Vor%

Der obige Befehl schlägt jedoch fehl, wenn der Benutzer eine neue Verzweigung in ein gemeinsames Repository verschiebt old_sha1 ist alles Nullen. Die Frage ist also, wie bekomme ich eine Liste von eingehenden Commits für eine neu erstellter Zweig Doing git rev-list $new_sha1 funktioniert nicht, da es alle Revisionen bis zum Anfang der Zeiten gibt. Gibt es eine Möglichkeit, so etwas zu spezifizieren:

%Vor%     
KiRPiCH 24.12.2010, 01:23
quelle

3 Antworten

9

Versuchen Sie Folgendes:

%Vor%

Dies verwendet git for-each-ref , um bekannte Referenzen zu drucken; gibt in --format an, dass der Kurzname zusammen mit einem vorhergehenden Caret ausgegeben wird; und sagt mit refs/heads/ nur lokale Köpfe auszuwählen. Am Ende läuft so etwas:

%Vor%

Das Caret bedeutet "von hier aus erreichbare Commits ausschließen". Dies gibt Ihnen also alle Commits, die von $new_sha1 aus erreichbar sind, aber sind nicht von den bestehenden Referenzen.

Um die Fälle new-ref und existed-ref gleichzeitig zu behandeln, können Sie die Array-Unterstützung von bash verwenden:

%Vor%     
Aristotle Pagaltzis 25.12.2010, 22:19
quelle
1

In meinem Fall hat Folgendes geholfen. Ich persönlich finde es sehr einfach.

%Vor%     
Kashif Nazar 14.07.2015 09:31
quelle
1

Einfacher können Sie dies verwenden:

%Vor%

Es ist ziemlich das gleiche Prinzip wie in Aristoteles Pagaltzis 'Antwort , aber es verwendet nur rev-list ' s in Optionen (von denen ich vermute, dass sie hinzugefügt wurden, nachdem diese Frage beantwortet wurde ...).
Der Parameter --all entspricht dem for-each-ref -Teil: Er fügt alle bekannten Refs den Befehlsargumenten hinzu. Der Parameter --not , in diesem speziellen Fall ist wie das Hinzufügen des Präfix ^ zu allen Referenzen, die von --all hinzugefügt wurden.
Somit wird dieser Befehl Commits drucken, die von dem neuen SHA1 erreichbar sind, mit Ausnahme aller, die von den bekannten (d. H. Bereits gepushten) Refs erreichbar sind.

    
fbastien 20.01.2016 14:31
quelle

Tags und Links