Überspringen Sie Git-Commit-Hooks

505

Ich schaue auf einen Git-Hook, der nach Druckanweisungen im Python-Code sucht. Wenn eine print-Anweisung gefunden wird, wird das Festschreiben von git verhindert.

Ich möchte diesen Hook überschreiben und mir wurde gesagt, dass es einen Befehl dazu gibt. Ich konnte es nicht finden. Irgendwelche Gedanken?

Ben
quelle
1
Eine allgemeinere Lösung (funktioniert auch für andere Git-Befehle als commit): stackoverflow.com/questions/58337861/…
Gabriel Devillers

Antworten:

868

Vielleicht (von der git commitManpage ):

git commit --no-verify

-n  
--no-verify

Diese Option umgeht die Hooks Pre-Commit und Commit-Msg. Siehe auch Githooks (5) .

Wie von Blaise kommentiert , kann für bestimmte Befehle eine andere Rolle spielen. Zum Beispiel ist eigentlich ein Trockenlauf Push. Nur würde den Haken überspringen.-n
git push -n
git push --no-verify


Hinweis: Git 2.14.x / 2.15 verbessert das Verhalten von --no-verify:

Siehe Commit 680ee55 (14. August 2017) von Kevin Willford (``) .
(Zusammengeführt von Junio ​​C Hamano - gitster- in Commit c3e034f , 23. August 2017)

commit: Überspringen Sie das Verwerfen des Index, wenn kein pre-commitHook vorhanden ist

" git commit" wird verwendet, um den Index zu verwerfen und erneut aus dem Dateisystem zu lesen, falls der pre-commitHook ihn in der Mitte aktualisiert hat. Dies wurde optimiert, wenn wir wissen, dass wir den pre-commitHaken nicht ausführen .


Davi Lima weist darauf hin , in den Kommentaren die git cherry-picknicht nicht --no-verify unterstützen.
Wenn also ein Cherry-Pick einen Pre-Commit-Hook auslöst, müssen Sie diesen Hook möglicherweise, wie in diesem Blog-Beitrag , irgendwie kommentieren / deaktivieren, damit Ihr Git-Cherry-Pick fortfährt.
Der gleiche Prozess wäre im Falle git rebase --continueeiner Konfliktlösung nach einer Zusammenführung erforderlich .

VonC
quelle
1
@ DavidLima Danke. Ich habe Ihren Kommentar in die Antwort zur Sichtbarkeit aufgenommen.
VonC
1
Danke, @Vonc. Gleiches geschieht für git rebase --continuebtw
Davi Lima
Hallo, in meinem Fall aktualisiert jemand in meinem Team meinen hookOrdner ständig mit einigen Pre-Commit-Skripten. Es ist so ärgerlich. Gibt es eine Möglichkeit, zu verhindern, dass mein hookOrdner durch Git Pull überschrieben wird?
Zennichimaro
@Zennichimaro Vielleicht können Sie diesen Repo-Hook-Ordner an eine andere Stelle kopieren und einen Post-Merge-Hook ( git-scm.com/docs/githooks#_post_merge ) einrichten, der erkennt , ob der Pull den Repo-Hook-Ordner beeinflusst, und vorschlägt, ihn zu kopieren Inhalt in Ihrem lokalen Hook-Ordner (außerhalb des Repos): Auf diese Weise können Sie zumindest steuern, ob Ihre Hooks durch das, was Ihre Kollegen vorantreiben, überschrieben werden sollen oder nicht.
VonC
22

Von man githooks:

Pre-Commit
Dieser Hook wird von Git Commit aufgerufen und kann mit der Option --no-verify umgangen werden. Es nimmt keinen Parameter an und wird aufgerufen, bevor die vorgeschlagene Commit-Protokollnachricht abgerufen und ein Commit durchgeführt wird. Wenn Sie dieses Skript mit einem Status ungleich Null beenden, wird das Git-Commit abgebrochen.

Chris Eberle
quelle
2

Für diejenigen very beginners, die einige Stunden für dieses Commit (mit commentund no verify) ohne weitere Probleme aufgewendet haben

git commit -m "Some comments" --no-verify
Moumit
quelle