如何递归地忽略文件

我试图在 .gitignore文件中避免以下模式。

MyPrject/WebApp/Scripts/special/*.js
MyPrject/WebApp/Scripts/special/*/*.js
MyPrject/WebApp/Scripts/special/*/*/*.js
MyPrject/WebApp/Scripts/special/*/*/*/*.js
MyPrject/WebApp/Scripts/special/*/*/*/*/*.js
MyPrject/WebApp/Scripts/special/*/*/*/*/*/*.js
MyPrject/WebApp/Scripts/special/*/*/*/*/*/*/*.js

我们试过:

MyPrject/WebApp/Scripts/special/**.js
MyPrject/WebApp/Scripts/special/**/*.js

然而这并没有奏效。这是 Windows 上的 Git。有没有更简洁的方法来做到这一点,而不重复事情?

117438 次浏览

以下是吉蒂诺尔手册页:

[...] git treats the pattern as a shell glob suitable for 使用带有 FNM _ PATHNAME 标志: 通配符的 fnmatch (3) 模式将与路径名中的 a/不匹配。

因此,这清楚地表明,没有办法在两个字符串之间指定 一定数量的目录,比如在 specialjs之间。

尽管如此,您可以为每个目录提供一个 .gitignore文件,因此在您的示例中可能包含以下内容

*.js

在下面的地方

MyPrject/WebApp/Scripts/special/.gitignore

就足够了吗?

从 git1.8.2开始,这个:

MyPrject/WebApp/Scripts/special/**/*.js

根据 这个答案工作。它也适用于我在 Windows 7中使用 Sourcetree 1.6.12.0和它安装的 git 版本(1.8.4-preview20130916)。

递归地忽略目录下的每个文件和文件夹:

MyPrject/WebApp/Scripts/special/**

这对我在 OSX 的工作很有用。

lib64/**/__pycache__/
lib/**/__pycache__/
*.py[cod]
.ipynb_checkpoints/
**/.ipynb_checkpoints/
.DS_Store
**/.DS_Store

尝试执行 git rm -r --cached MyPrject/WebApp/Scripts/special/ 您提到的目录可能已被 git 缓存,并将显示在未跟踪的文件中。 在清除缓存之后,确保在 .gitignore中提到了它。