有没有办法忽略目录的类型的所有文件?
**
显然是毫无意义的git的,所以这不工作:
/public/static/**/*.js
我们的想法是一致的任意嵌套的文件夹。
有没有办法忽略目录的类型的所有文件?
**
显然是毫无意义的git的,所以这不工作:
/public/static/**/*.js
我们的想法是一致的任意嵌套的文件夹。
从来没有尝试过,但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
”等等。其他连续的星号被视为无效。
更新:看看@乔伊的回答 :现在的Git支持**
的模式语法。 这两种方法都应该能正常运行。
该gitignore(5)手册页中指出:
模式在同一目录从的.gitignore文件中读取的路径,或以任何父目录,在更高级别的文件模式(最多工作树的顶层)是由那些低级别的文件覆盖到的目录包含文件。
这意味着,在一个模式.gitignore
在回购任何给定的目录中的文件将影响目录及其所有子目录 。
您提供的模式
/public/static/**/*.js
是不完全正确,首先是因为(正如你正确地指出)的**
语法不使用Git的。 此外,领先/
锚这一模式的路径的开始。 (所以, /public/static/*.js
将匹配/public/static/foo.js
但不 /public/static/foo/bar.js
) 除去最主要 编辑:只是去掉斜线将无法正常工作或者-因为该模式还包含斜杠,它是由混帐当作一个普通的,非递归壳水珠(感谢@Joey Hoer指出了这一点)。 /
不会工作,像匹配的路径public/static/foo.js
和foo/public/static/bar.js
。
作为@ptyx建议,你需要做的是创建文件<repo>/public/static/.gitignore
和只包括以下模式:
*.js
没有领先的/
,所以它会匹配在路径的任何部分,而这种模式将永远只能适用于文件/public/static
目录及其子目录。
要忽略未跟踪文件刚去的.git /信息/排除。 排除是忽略扩展或文件的列表的文件。
我认为最简单的办法是使用find
。 我不喜欢有多个.gitignore
挂在子目录周围,我更喜欢管理一个独特的,顶级.gitignore
。 要做到这一点,你可以简单地找到的文件添加到您.gitignore
。 假设/public/static/
为你的项目/ git的家,我会使用类似:
find . -type f -name *.js | cut -c 3- >> .gitignore
我发现,切割出./
开头往往是必要的混帐了解哪些文件,以避免。 因此, cut -c 3-
。