Answers:
从来没有尝试过,但git help ignore暗示,如果你把一个.gitignore用*.js在/public/static,它会做你想要什么。
注意:请确保还检查以下Joeys的答案:如果要忽略特定子目录中的文件,则使用本地.gitignore是正确的解决方案(本地性很好)。但是,如果您需要将相同的模式应用于整个存储库,那么**解决方案会更好。
根据该文档,似乎该**语法受git版本支持。1.8.2.1
**与完整路径名匹配的模式中的两个连续星号(“ ”)可能具有特殊含义:
前导“
**”后跟斜杠表示在所有目录中均匹配。例如,“**/foo”与文件“foo”相同的任何位置都匹配文件或目录“foo”。“**/foo/bar”bar会在目录“foo” 正下方的任何位置匹配文件或目录“ ”。尾部的“
/**”与内部的所有内容匹配。例如,“abc/**”将目录“abc” 内的所有文件(相对于.gitignore文件位置)以无限的深度进行匹配。斜杠后跟两个连续的星号,然后斜杠匹配零个或多个目录。例如,“
a/**/b”匹配“a/b”,“a/x/b”,“a/x/y/b”等。其他连续的星号被视为无效。
xxx/**和之间有什么区别xxx/?
xxx/**定位到其中的所有文件和目录,xxx而直接xxx/定位到该xxx目录。这实际上仅在否定模式时才有意义,!例如“如果排除了该文件的父目录,则无法重新包含文件。”,因此在这种情况下必须使用xxx/*或xxx/**。
**.js?
更新:看看@Joey的答案:Git现在支持**模式中的语法。两种方法都可以正常工作。
该gitignore(5)手册页中指出:
从与路径相同的目录中或任何父目录中的.gitignore文件读取的模式,较高级别文件(直到工作树的顶层)中的模式被较低级别文件(直至该目录)中的模式覆盖包含文件。
这意味着.gitignore回购的任何给定目录中文件中的模式都会影响该目录和所有子目录。
您提供的模式
/public/static/**/*.js
不太正确,首先是因为(如您正确指出的)**Git不使用该语法。同样,前导/将该模式锚定到路径名的开头。(因此,/public/static/*.js将匹配/public/static/foo.js但不 匹配/public/static/foo/bar.js。)删除前导编辑:仅仅删除前导斜杠也将不起作用-因为该模式仍然包含斜杠,所以Git将其视为普通的,非递归的外壳程序(感谢@Joey Hoer指出了这一点)。/也将不起作用,匹配路径如public/static/foo.js和foo/public/static/bar.js。
正如@ptyx建议的那样,您需要做的是创建文件<repo>/public/static/.gitignore并仅包含以下模式:
*.js
没有前导/,因此它将在路径的任何部分匹配,并且该模式将仅应用于/public/static目录及其子目录中的文件。
/也将不起作用,匹配路径如public/static/foo.js和” foo/public/static/bar.js。是错误的。引用文档 “如果该模式不包含斜杠/,Git会将其视为shell glob模式,并检查相对于.gitignore文件位置的路径名是否匹配(相对于工作树的顶层,如果而不是来自.gitignore文件)。” foo/public/static/bar.js不会匹配,因为该模式确实包含/。
要忽略未跟踪的文件,只需转到.git / info / exclude。排除文件是带有忽略的扩展名或文件列表的文件。