|
Freitag, 17 Uhr:
So, Arbeit getan. Jetzt noch schnell committen und pushen...
$ git status $ git add --all $ git commit -m'Add new feature' $ git push
Oops, da hab ich schon wieder ein
debugger;
vergessen zu entfernen und die Konsolenausgaben sind auch noch drin!
Wer sich mit dem Obigen wiedererkennt, wünscht sich vielleicht einen, der Ihm kurz vorm Committen auf die Schulter tipps und fragt: "Hast du auch den Debugging-Code entfernt?".
Dieser neue Freund könnte git sein. Nicht von Haus aus, aber man kann git schnell dazu bringen zu bestimmten Zeitpunkten bestimmte Aktionen durchzuführen.
Ich möchte vor jedem Commit in allen Repositories prüfen, ob ich in meinen Änderungen Debugging-Code liegen lassen habe. Dazu benutze ich einen git Hook, im Speziellen einen Pre Commit Hook.
Git-Templates
Zuerst muss ein globales Template-Directory fest- und angelegt werden.
git config --global init.templatedir '~/.git-templates'
mkdir -p ~/.git-templates/hooks
Wenn ein neues git-Repo initialisiert wird, wird der Inhalt des (globalen) durch init.templatedir
festgelegten Ordners in den (lokal) Ordner des Repos gelegt. Das wollen wir!
Pre Commit Hook einrichten
Jetzt muss in diesem Ordner das Script mit dem Namen pre-commit
angelegt werden
vi ~/.git-templates/hooks/pre-commit
Ersetze vi
durch den Editor deiner Wahl. Ich habe das Script nicht neu erfunden und mich bei Gerad Suyderhoud bedient. Funktioniert einwandfrei.
Das Script muss noch ausführbar gemacht werden.
chmod a+x $_
Letzterer Befehl macht das Script ausführbar. $_
ist dabei der letzte Parameter des letzten Shell-Befehls also der Pfad des pre-commit Scripts.
Im Repo nutzen
Im .git
-Ordner von meinen bestehenden Projekten ist jetzt der pre-commit Hook nicht verfügbar. Hier ist der git init Prozess schon lange vorbei. Ein neuerliches git init
im Projektordner ist aber nicht schädlich und schafft Abhilfe. Also:
cd /path/to/my/repo/
git init
Ergebnis
Ich bin in meinem Repo und beabreite die Datei libraries/mylib.js
indem ich in zwei Zeilen ein debugger;
- und ein console.log
-Statement schreibe.
Wieder Freitag, 17 Uhr:
So, Arbeit getan. Jetzt noch schnell committen und pushen...
$ git status $ git add --all $ git commit -m'Add new Feature' * * You have some suspicious patch lines: * * In libraries/mylib.js * debugger breakpoint left in (line 167) libraries/mylib.js:167: debugger; * console logging left in (line 173) libraries/mylib.js:173: console.log('Hello World');
Der Commit ist nicht durchgeführt worden. Saved my day!
Ausnahmen bestätigen die Regel
Wenn ich aber doch mal unbedingt ein solches Statement committen möchte, kann ich den pre-commit Hook umgehen, indem ich mit
git commit --no-verify -m'Add new Feature'
committe.