gitignore目录中所有扩展名的文件

有没有办法忽略目录中的所有types的文件?

**显然是没有意义的,所以这是行不通的:

 /public/static/**/*.js 

这个想法是匹配任意嵌套的文件夹。

从来没有尝试过,但git help ignore暗示,如果你把*.js.gitignore/public/static ,它会做你想做的。

注意:一定要检查出Joeys的答案如下:如果你想忽略特定的子目录中的文件,那么一个本地.gitignore是正确的解决scheme(地方是好的)。 但是,如果您需要相同的模式来应用到您的整个回购,那**解决scheme就更好了。

根据文档,似乎从版本1.8.2.1git支持**语法。

与全path匹配的模式中的两个连续的星号(“ ** ”)可能具有特殊的含义:

  • 前面的“ ** ”跟斜杠表示所有目录中的匹配。 例如,“ **/foo ”在任何地方与文件或目录“ **/foo ”匹配,与模式“ foo ”相同。 “ **/foo/bar ”与直接在“ foo ”目录下的任何地方的文件或目录“ **/foo/bar ”相匹配。

  • 尾随“ /** ”匹配里面的所有内容。 例如,“ abc/** ”匹配目录“ abc ”内的所有文件,相对于.gitignore文件的位置,具有无限深度。

  • 斜杠后跟两个连续的星号,则斜线匹配零个或多个目录。 例如,“ a/**/b ”匹配“ a/b ”,“ a/x/b ”,“ a/x/y/b ”等等。

  • 其他连续的星号被认为是无效的。

更新:看看@乔伊的答案 :Git现在支持模式中的**语法。 两种方法都应该正常工作。


gitignore(5)手册页指出:

从path相同目录或任何父目录中的.gitignore文件中读取的模式(高级文件中的模式(直到工作树的顶层)被下层文件中的模式覆盖到目录包含该文件。

这意味着任何给定目录中的.gitignore文件中的模式都将影响该目录所有子目录

你提供的模式

 /public/static/**/*.js 

是不是很正确,首先是因为(正如你正确指出的), **语法不被Git使用。 此外,模式的开头/锚点的path名的开始。 (因此, / public/static/foo.js /public/static/foo/bar.js / /public/static/foo/bar.js . /public/static/*.js将匹配/public/static/foo.js匹配/public/static/foo.js 。) 删除前导/也将不起作用匹配path,如public/static/foo.jsfoo/public/static/bar.js 编辑:只是删除前导斜杠将无法正常工作 – 因为该模式仍然包含一个斜杠,它被Git视为一个普通的,非recursion的shell glob(感谢@Joey Hoer指出了这一点)。

正如@ptyx所build议的,你需要做的是创build文件<repo>/public/static/.gitignore并且只包含这个模式:

 *.js 

没有前导/ ,所以它将在path的任何部分匹配,并且该模式将只应用于/public/static目录及其子目录中的文件。

要忽略未跟踪的文件,只需转到.git / info / exclude。 排除是具有被忽略的扩展名或文件列表的文件。