从git空白检查中排除Jest快照

时间:2016-09-16 18:20:42

标签: git whitespace githooks jestjs

我正在使用git diff-index --check --cached HEAD --从git提交中修剪空白。我想使用快照添加Jest测试,但快照文件包含空格,如果删除它,我的测试将始终失败。所以我想从空格检查中排除*.js.snap个文件。如何告诉git从*.js.snap中排除**/__snapshots/*(或者,git diff-index)文件?我在OSX上使用bash。

与此同时,我通过将提交挂钩更改为交互式来解决此问题:

# 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

2 个答案:

答案 0 :(得分:3)

Git确实有一种指定要排除的路径的方法,尽管它记录不清,而且显然不是很清楚。它被称为pathspec,在这种情况下可以按如下方式使用:

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

其中:是指定pathspec不仅仅是常规路径的特殊字符,并且&#39;!&#39;指定匹配路径其余部分的文件应从匹配列表中排除。

不像Mercurial -X--exclude那么简单,但它就在那里。

答案 1 :(得分:1)

作为mentioned heregit diff-index的路径参数是glob样式模式,由shell解释。

所以这更像是一个shell问题,而不是一个git命令问题。

例如参见&#34; How can I use inverse or negative wildcards when pattern matching in a unix/linux shell?&#34;

您可以尝试激活shopt extglob,或者(更简单),对您的脚本执行后续步骤,查找(使用git status)其中包含**/__snapshots/*的任何已修改文件完整路径名,并取消修改(git checkout)。