如何递归.gitignore文件


105

我试图避免.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。有没有一种更简洁的方法可以重复执行此操作?


Answers:


114

从git 1.8.2开始,这是:

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

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

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

MyPrject/WebApp/Scripts/special/**

git 1.8之前的版本呢?
ashes999 2015年

1
如果此答案不起作用(在Windows上),请/在开头添加字符。范例:/MyProject/WebApp/Scripts/special/**/*.js
batressc '16

2
我很尴尬的是,当我的答案实际上是指向另一个答案的链接时,我的答案却不断受到批评。
山姆

1
@puk:.gitignore此问题中的处于回购根目录(的父目录/Webapp)中。
lucid_dreamer

1
您的答案看起来不错,但在Windows 10上的git 1.9.1上对我来说不起作用,原因是在以下情况下忽略了js以外的所有文件:(第一行)foo/bar/*/*(第二行)!foo/bar/**/*.js它仅适用于一个级别的子目录,但不适用于递归。
学士

19

以下gitignore手册页:

[...] git将模式视为适合Fnmatch(3)使用FNM_PATHNAME标志使用的shell全局变量:模式中的通配符与路径名中的/不匹配。

因此,这清楚地表明,无法在两个字符串之间指定一定数量的目录,例如special和之间js

不过,您可以在.gitignore每个目录中有一个文件,因此在您的情况下,可能包含以下内容

*.js

在以下地方

MyPrject/WebApp/Scripts/special/.gitignore

足够了吗?


我曾经有过MyPrject/WebApp/Scripts/special*.js和它相匹配MyPrject/WebApp/Scripts/specialfile.js,以及MyPrject/WebApp/Scripts/special/a/b/c/file.js。但是,由于某种原因,行为已更改,我目前的解决方法是单独列出目录。我在Windows上使用GitHub。
Orad 2013年

1
例如find MyPrject/WebApp/Scripts/special -type d -printf 'echo "*.js" >> %h/.gitignore\n git add %h/.gitignore\n' | sh
jthill

9

这在osx上对我有用。

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

0

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.