我正在使用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
答案 0 :(得分:3)
Git确实有一种指定要排除的路径的方法,尽管它记录不清,而且显然不是很清楚。它被称为pathspec,在这种情况下可以按如下方式使用:
git diff-index --check --cached HEAD -- ':!*.js.snap' .
其中:
是指定pathspec不仅仅是常规路径的特殊字符,并且&#39;!&#39;指定匹配路径其余部分的文件应从匹配列表中排除。
不像Mercurial -X
或--exclude
那么简单,但它就在那里。
答案 1 :(得分:1)
作为mentioned here,git 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)。