2017-08-18 4 views
-1

Ich habe eine lokale pre-commit commit, die ausgeführt wird, und stoppt die, wie erwartet, wenn I commit git commitgit pre Commit-hook nicht aktiv beim Ausführen git -a

Auch laufen, wie erwartet, kann ich Bypass der Haken, wenn ich renne git commit -n ...

Allerdings läuft git commit -am "My message" oder in der Tat, nur git commit -a scheint den Haken umgehen und ermöglichen das Commit verarbeitet werden.

Irgendeine Idee, warum das geschehen kann?

Bearbeiten: Haken unten.

PROJECT_ROOT=`git rev-parse --show-toplevel` 
CHANGED=`git diff --stat -- $PROJECT_ROOT/myProj/myfile.ext | wc -l` 
if [ $CHANGED -gt 0 ]; 
then 
    echo "myfile.ext file has changed, are you sure you want to commit" 
    echo "Use the -n parameter to process this commit." 
    exit 1 
fi 
+0

zu dem Haken einfügen. – ishegg

+0

Und gerade als Sie das geschrieben haben, habe ich festgestellt, dass meine Hook-Bedingung wahrscheinlich für jeden Befehl anders auswertet .. :) – Nash

Antwort

0

So war es Benutzerfehler ..

Der Haken in beiden Fällen ausgeführt wurde, aber die Logik, die ich verwendet, um eine Änderung in meiner Datei zu erkennen hat nicht funktioniert, wenn der -a Befehl geliefert wurde .

Überprüfen gegen den Remote-Repo hat den Trick gemacht.

CHANGED=`git diff origin/master --stat -- $PROJECT_ROOT/myProj/myfile.ext | wc -l`

bearbeitet: Dank @torek, eine angemessenere Art und Weise für eine Änderung zu überprüfen ist:

CHANGED=`git diff --cached --stat -- $PROJECT_ROOT/myProj/myfile.ext | wc -l` 
+1

Das ist nicht "gegen die Remote-Repo", das ist der Quellbaum mit einem * lokalen * Commit mit der Bezeichnung "Herkunft/Master' mit dem Quellbaum in Ihrem * Arbeitsbaum *. Es wird Ihnen andere Ergebnisse geben, aber wahrscheinlich nicht das, wonach Sie suchen: Der Inhalt des Arbeitsbaums ist nicht unbedingt der zu verpflichtende Inhalt; Was zu tun ist, ist was auch immer im Index steht. Im Allgemeinen sollte man das 'HEAD'-Commit mit dem Index vergleichen, was für Menschen mit' git diff -cached' gemacht wird (Script-Writer bevorzugen die "plumbing commands", um nicht von Benutzerkonfigurationen betroffen zu sein). – torek

+0

Ah ja - ich könnte mich schuldig gemacht haben, diese ursprüngliche Vergleichszeile von einer anderen SO Frage zu kopieren :) Danke für die Klärung! – Nash

+1

Das ist definitiv eine Verbesserung. :-) Ich denke, es ist wichtig zu beachten, dass man sich im * remote * Repo * überhaupt * nichts anschauen kann, man kann nur auf sein eigenes Repo schauen. Sie können (jederzeit) 'git fetch' von einer Fernbedienung holen, um so * über * das andere Repo wie möglich zu erhalten, aber dies kopiert einfach ihre Sachen in * Ihr * Repo. Alles andere, was Sie tun, ist von Natur aus lokal und die Fernbedienung ändert sich möglicherweise, während Sie arbeiten. Das ist eine fundamentale Eigenschaft von verteilten Repositories, also ist es nicht so, als ob man etwas dagegen tun müsste, aber es lohnt sich, daran zu denken. – torek