gitignore目录中所有扩展名的文件
有没有办法忽略目录中的所有types的文件?
**
显然是没有意义的,所以这是行不通的:
/public/static/**/*.js
这个想法是匹配任意嵌套的文件夹。
从来没有尝试过,但git help ignore
暗示,如果你把*.js
的.gitignore
在/public/static
,它会做你想做的。
注意:一定要检查出Joeys的答案如下:如果你想忽略特定的子目录中的文件,那么一个本地.gitignore是正确的解决scheme(地方是好的)。 但是,如果您需要相同的模式来应用到您的整个回购,那**解决scheme就更好了。
根据文档,似乎从版本1.8.2.1
, git
支持**
语法。
与全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
。) 删除前导 编辑:只是删除前导斜杠将无法正常工作 – 因为该模式仍然包含一个斜杠,它被Git视为一个普通的,非recursion的shell glob(感谢@Joey Hoer指出了这一点)。 /
也将不起作用匹配path,如public/static/foo.js
和foo/public/static/bar.js
正如@ptyx所build议的,你需要做的是创build文件<repo>/public/static/.gitignore
并且只包含这个模式:
*.js
没有前导/
,所以它将在path的任何部分匹配,并且该模式将只应用于/public/static
目录及其子目录中的文件。
要忽略未跟踪的文件,只需转到.git / info / exclude。 排除是具有被忽略的扩展名或文件列表的文件。