2016-09-16 5 views
7

Ich trimme Whitespace von Git-Commits mit git diff-index --check --cached HEAD --. Ich möchte Jest-Tests mithilfe von Snapshots hinzufügen, aber die Snapshot-Dateien enthalten Whitespace und meine Tests werden immer fehlschlagen, wenn ich sie entferne. Also möchte ich die *.js.snap Dateien von der Whitespace-Prüfung ausschließen. Wie kann ich git anweisen, *.js.snap (oder alternativ **/__snapshots/*) Dateien von git diff-index auszuschließen? Ich benutze Bash auf OSX.Jest-Snapshots von Git-Whitespace-Überprüfung ausschließen

In der Zwischenzeit arbeite ich, um das Problem durch meinen Wechsel commit interaktiv zu sein:

# If there are whitespace errors, print the offending file names and fail. 
git diff-index --check --cached HEAD -- 
if [ $? -ne 0 ]; then 
    # Allows us to read user input below, assigns stdin to keyboard 
    exec < /dev/tty 

    while true; do 
     echo "Your commit introduces trailing whitespace. Are you sure you want to commit? y/n" 
     read yn 
     case $yn in 
      y) exit 0;; 
      n) exit 1;; 
     esac 
    done 
fi 

Antwort

1

Als mentioned here, der Pfad Argument von git diff-index des Musters glob-Stil, von der Shell interpretiert .

Das ist also mehr ein Shell-Problem als ein Git Befehlsproblem.

zum Beispiel Siehe „How can I use inverse or negative wildcards when pattern matching in a unix/linux shell?

Sie können entweder versuchen, und aktivieren shopt extglob, oder (einfacher), machen einen Post-Schritt zu Ihrem Skript, auf der Suche (mit git status) für modifizierte Dateien mit **/__snapshots/* in voller Pfadname, und ihre Änderung abbrechen (git checkout).

+0

Danke, dass Sie sich die Zeit nehmen zu antworten. Ich habe ziemlich viel Zeit mit negativen Wildcards und GLOBIGNORE verbracht, aber beides würde nicht funktionieren. Beide schienen nur mit Mustern zu funktionieren, die nicht mehr als eine Wildcard enthielten ('**/*'). – undefined

+0

Ich werde dir immer noch das Kopfgeld geben, da ich es mir nicht geben kann, nicht, dass du dich jetzt um den Ruf kümmerst! – undefined

+0

@undefined Vielen Dank für dieses Feedback und +1 für Ihre Antwort. Ich erwähnte Pathspec vorher hier: http://Stackoverflow.com/a/38931091/6309 und http://Stackoverflow.com/a/35622183/6309, mit Beispielen in http://stackoverflow.com/a/33462321/6309 – VonC

3

Git verfügt über eine Möglichkeit, auszuschließende Pfade anzugeben, obwohl sie nur schlecht dokumentiert und anscheinend nicht sehr bekannt sind. Es ist bekannt, wie pathspec, und in diesem Fall kann wie folgt verwendet werden: ‚!‘

git diff-index --check --cached HEAD -- ':!*.js.snap' . 

wo : den besonderen Charakter ist, die angibt, dass die Pfadangabe nicht nur ein ganz normaler Weg ist, und Gibt an, dass Dateien, die mit dem Rest des Pfads übereinstimmen, aus der Liste der Übereinstimmungen ausgeschlossen werden sollen.

Nicht so einfach wie Mercurial -X oder , aber es ist da.