gitignore目录中的所有扩展文件

时间:2012-05-23 02:04:12

标签: git gitignore

有没有办法忽略目录中所有类型的文件?

**显然对git毫无意义,所以这不起作用:

/public/static/**/*.js

这个想法是匹配任意嵌套文件夹。

6 个答案:

答案 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(5) man page州:

  

从与路径相同的目录中的.gitignore文件读取的模式,或在任何父目录中读取的模式,其中较高级别文件中的模式(直到工作树的顶层)被较低级别文件中的模式覆盖到包含该文件的目录。

这意味着您的仓库的任何指定目录中的.gitignore文件中的模式都会影响该目录所有子目录

您提供的模式

/public/static/**/*.js

不太正确,首先是因为(正如您所记得的)Git不使用**语法。此外,模式到路径名开头的前导/锚点。 (因此,/public/static/*.js将匹配/public/static/foo.js,但不会 /public/static/foo/bar.js。)删除潜在客户/也将无效,匹配路径比如public/static/foo.jsfoo/public/static/bar.js编辑:只删除前导斜杠也不起作用 - 因为模式仍然包含斜杠,它被Git视为普通的,非递归的shell glob(感谢@Joey Hoer指出这一点)。

正如@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