有没有办法忽略目录中所有类型的文件?gitignore目录中所有扩展名的文件
**
显然是毫无意义的git的,所以这不起作用:
/public/static/**/*.js
的想法是匹配任意嵌套的文件夹。
有没有办法忽略目录中所有类型的文件?gitignore目录中所有扩展名的文件
**
显然是毫无意义的git的,所以这不起作用:
/public/static/**/*.js
的想法是匹配任意嵌套的文件夹。
从来没有尝试过,但git help ignore
暗示,如果你把.gitignore
与*.js
在/public/static
,它会做你想做的。
注意:请务必在下面检查Joeys的答案:如果您想忽略特定子目录中的文件,那么本地.gitignore是正确的解决方案(本地是好的)。但是,如果您需要相同的模式来应用于您的整个回购,那么**解决方案会更好。
更新:看看@Joey's answer:Git现在支持模式中的**
语法。两种方法都应该正常工作。
的gitignore(5) man page状态:在相同的目录路径从的.gitignore文件中读取
模式,或以任何父目录,在更高级别的文件模式(最多顶层)被低级文件中的文件覆盖到包含该文件的目录。
这意味着,在一个.gitignore
文件在您的回购任何给定目录的模式会影响该目录和所有子目录。您所提供
模式
/public/static/**/*.js
是不完全正确,首先是因为(正如你正确地指出)的**
语法不使用Git的。此外,领先的/
锚定模式的路径名的开始。 (所以,/public/static/*.js
将匹配/public/static/foo.js
但不/public/static/foo/bar.js
。)
卸下领先
编辑:只删除前导斜杠也不会工作 - 因为该模式仍然包含一个斜杠,它被Git视为一个普通的,非递归的shell glob(感谢@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'这样的路径。”是错误的。 引用[该文档](http://git-scm.com/docs/gitignore/)“如果该模式不包含斜杠/,Git将其视为shell glob模式,并检查与路径名匹配相对于.gitignore文件的位置(相对于工作树的顶层,如果不是来自.gitignore文件)。“ 'foo/public/static/bar.js'不会匹配,因为该模式确实包含'/'。 – joeyhoer
@JoeyHoer感谢小费,我已经相应地更新了我的答案。 –
要忽略未跟踪的文件,只需转到.git/info/exclude。排除是具有被忽略的扩展名或文件列表的文件。
这不会延续到存储库的其他克隆中,例如.gitignore(当然会在提交之后)。 – jpmc26
根据the documentation,看起来**
句法由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
” 等。其他连续的星号被视为无效。
的[混帐 - 忽略子目录某些文件,但不是全部]可能重复(http://stackoverflow.com/questions/6794717/git-ignore-certain-files-in-sub -directories-but-not-all) –