2016-09-16 7 views
7

Я обрезаю пробелы из git commits, используя git diff-index --check --cached HEAD --. Я хочу добавить тесты Jest с помощью моментальных снимков, но файлы моментальных снимков включают пробелы, и мои тесты всегда будут терпеть неудачу, если я удалю его. Поэтому я хочу исключить файлы *.js.snap из проверки пробелов. Как сообщить git об исключении *.js.snap (или, альтернативно, **/__snapshots/*) файлов из git diff-index? Я использую bash для OSX.исключить снимки jest из git whitespace check

В то же время, я работаю над проблемой, меняю совершить крюк, чтобы быть интерактивным:

# 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 

ответ

1

Как mentioned here, путь аргумент git diff-index имеет шаблон Glob стиле, интерпретатором ,

Так что это скорее проблема оболочки, чем проблема с командой git.

Смотри, например, «How can I use inverse or negative wildcards when pattern matching in a unix/linux shell?»

Вы можете попробовать и активировать shopt extglob, или (проще), сделать пост-шаг в сценарий, глядя (с git status) для любых измененных файлов с **/__snapshots/* в их полном объеме имя пути и отмену их модификации (git checkout).

+0

Спасибо, что нашли время ответить. Я провел довольно много времени, играя с отрицательными подстановочными знаками и GLOBIGNORE, но ни один из них не сработает. Оба только работали с шаблонами, которые не включают более одного шаблона ('**/*'). – undefined

+0

Я по-прежнему буду награждать вас щедростью, так как я не могу отдать ее себе, а не то, что вы занимаетесь репутацией на этом этапе! – undefined

+0

@undefined Спасибо за этот отзыв и +1 за ваш ответ. Я упомянул pathspec здесь: http://stackoverflow.com/a/38931091/6309 и http://stackoverflow.com/a/35622183/6309, с примерами в http://stackoverflow.com/a/33462321/6309 – VonC

3

У Git есть способ указать пути для исключения, хотя он плохо документирован и, по-видимому, не очень хорошо известен. Он известен как pathspec, и в этом случае можно использовать следующим образом: «!»

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

где : это специальный символ, который указывает, что pathspec не просто обычный путь, и указывает, что файлы, соответствующие остальной части пути, должны быть исключены из списка совпадений.

Не так просто, как Mercurial's -X или --exclude, но он есть.

 Смежные вопросы

  • Нет связанных вопросов^_^