吉特';s.gitignore不能与一个或多个星号限定符+;
我似乎在使用.gitignore中的+(一个或多个)模式匹配器时遇到问题。下面是一个测试,使用吉特';s.gitignore不能与一个或多个星号限定符+;,git,gitignore,Git,Gitignore,我似乎在使用.gitignore中的+(一个或多个)模式匹配器时遇到问题。下面是一个测试,使用+和*作为文件名中嵌入数字的模式限定符。我希望将Test.txt保留在源代码管理中,并忽略Test[0-9]+.txt文件 目录: $ git version git version 2.9.3.windows.1 Git忽略文件内容测试1: $ ll | grep Test -rw-r--r-- 1 asdf 1049089 0 Apr 5 15:55 Test.txt -rw-r--r
+
和*
作为文件名中嵌入数字的模式限定符。我希望将Test.txt保留在源代码管理中,并忽略Test[0-9]+.txt文件
目录:
$ git version
git version 2.9.3.windows.1
Git忽略文件内容测试1:
$ ll | grep Test
-rw-r--r-- 1 asdf 1049089 0 Apr 5 15:55 Test.txt
-rw-r--r-- 1 asdf 1049089 0 Apr 5 15:55 Test123.txt
-rw-r--r-- 1 asdf 1049089 0 Apr 5 15:55 Test1235.txt
-rw-r--r-- 1 asdf 1049089 0 Apr 5 15:55 Test124.txt
测试1:
Test[0-9]+.txt
这应该过滤掉第2到第4个文件
Git忽略文件内容测试2:
$ git status | grep Test
Test.txt
Test123.txt
Test1235.txt
Test124.txt
测试2:
Test[0-9]*.txt
这应该过滤掉所有的文件
为什么会发生这种情况?
.gitignore
只支持全局模式,不支持正则表达式
这里提到:
否则,git将模式视为一个shell glob,适合fnmatch(3)
使用FNM\u路径名
标志:模式中的通配符将与路径名中的/
不匹配。例如,“
Documentation/*.html
”匹配“Documentation/git.html
”但不匹配“Documentation/ppc/ppc.html
”或“tools/perf/Documentation/perf.html
”
有关更多信息,请搜索Glob Patterns与Regex以查看差异。gitignore文件使用的是globbing,而不是正则表达式。所以使用
+
是无效的
所以你的第二次尝试实际上更接近你想要的
Test*.txt
这将过滤掉以Test
开头,以.txt
结尾的文件,中间有任何内容。但它也会捕获Test.txt
本身,因为glob中的*
可以是零宽度
你所拥有的可能是最简单的选择
Test[0-9]*.txt
这将匹配Test
,后跟任何数字,后跟任何内容(包括无内容),后跟.txt
因此,它是不完美的,因为它也将匹配
$ git status | grep Test
Test.txt
其数字后面有非数字文本。但你的要求有多具体将决定这一点。您还可以添加一些模式,如
Test1foo.txt
如果你真的要确定它都是数字,那么只需选择多少个数字,然后使用多个这样的条目,使它成为一个非常具体的匹配
Test[0-9].txt
Test[0-9][0-9].txt
Test[0-9][0-9][0-9].txt
Test[0-9][0-9][0-9][0-9].txt
Test[0-9][0-9][0-9][0-9][0-9].txt