.gitignore在Windows下无法识别我的文件夹通配符。

19

我在Windows上遇到了一个奇怪的问题,涉及到.gitignore

我希望Git忽略所有.exe文件,除了在Dependencies文件夹(以及所有子文件夹)中的那些文件。

所以我有:

.gitignore:

*.exe
!/Dependencies/**/*.exe

遗憾的是,这个方法并不起作用。

与此同时,以下方法可行:

*.exe
!/Dependencies/folder/subfolder/*.exe

所以我在想,是我弄错了什么,还是这是一种bug?

我在Windows上(Windows 7 x64)运行msysgit版本为1.6.5.1-preview20091022。

提前感谢您的任何意见:)


2
这实际上和https://dev59.com/T3M_5IYBdhLWcg3wPAZF是相同的问题/误解。 - CB Bailey
3个回答

21

自从git 1.8.2(2013年3月8日)起,**现在被支持了:

.gitignore.gitattributes文件中的模式可以使用**/作为一个匹配0个或多个子目录级别的模式

例如,“foo/**/bar”将匹配“foo”本身或“foo”的子目录中的“bar”。

对于您的情况,这意味着此行可能已被支持:

!/Dependencies/**/*.exe

太棒了。感谢 Von 的跟进。 - Martin Suchanek
为了后人,jdigital 也是正确的;这是 Windows 实现 fnmatch 的问题,现在已经修复。 - Martin Suchanek

2

.gitignore文档中写道:

git将该模式视为适用于fnmatch(3)的shell glob,并带有FNM_PATHNAME标志

可能你的平台上的fnmatch不支持路径中的**。


1
@jdigital 这也是我怀疑(实际上是担心)的情况。如果是这样的话,那么它可能会在跨平台存储库中造成严重破坏 :( - Martin Suchanek

2
你可以在Dependencies文件夹中添加一个包含以下内容的.gitignore文件:
*.exe
显然的缺点是现在忽略规则分散在几个文件中。

2
为什么这个答案被接受并赞同了呢?问题是如何忽略 *.exe 文件,除了那些在 Dependencies/ 内的文件。 - Adam Spiers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接