有没有办法忽略目录中所有类型的文件?
**
显然对git毫无意义,所以这不起作用:
/public/static/**/*.js
这个想法是匹配任意嵌套文件夹。
答案 0 :(得分:171)
根据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
”等等。其他连续的星号被视为无效。
答案 1 :(得分:102)
从未尝试过,但是git help ignore
建议如果您在.gitignore
中放置*.js
/public/static
,那么它就可以完成您想要的操作。
注意:请务必查看以下Joeys的答案:如果您想忽略特定子目录中的文件,那么本地.gitignore是正确的解决方案(位置很好)。但是,如果您需要相同的模式应用于整个回购,那么**解决方案会更好。
答案 2 :(得分:62)
更新:看一下@Joey's answer:Git现在支持模式中的**
语法。两种方法都可以正常工作。
从与路径相同的目录中的.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
目录及其子目录中的文件。
答案 3 :(得分:9)
要忽略未跟踪的文件,只需转到.git / info / exclude。 Exclude是一个包含已忽略扩展名或文件列表的文件。
答案 4 :(得分:2)
我认为最简单的解决方案是使用find
。我不喜欢在子目录中闲逛多个.gitignore
,我更喜欢管理唯一的顶层.gitignore
。为此,您只需将找到的文件附加到您的.gitignore
。假设/public/static/
是您的项目/ git主页,我将使用类似的东西
find . -type f -name *.js | cut -c 3- >> .gitignore
我发现,在开始时切出./
常常是git理解要避免使用的文件所必需的。因此,cut -c 3-
。
答案 5 :(得分:0)
我尝试打开vscode .gitignore
中的windows 10
文件。在那里,您可以看到一些以前添加的忽略文件(如果有)。
要创建新规则以忽略扩展名为(.js)
的文件,请按如下所示附加文件的扩展名:
*.js
这将忽略.js
存储库中的所有git
文件。
要从特定目录中排除某些类型的文件,可以添加以下内容:
**/foo/*.js
这将忽略/ foo /目录中的所有.js文件。
有关详细的学习信息,您可以访问:about git-ignore