git会忽略特定类型的所有文件,但特定子文件夹中的文件除外


192

我有这样的目录结构:

    • 资料夹1
      • abc.json
      • def.json
      • Somedir
        • more.json
    • 资料夹2
      • qwe.json
      • rty.json
    • 规格
      • 模拟1.json
      • 模拟2.json
      • Somedir
        • more_mocks.json

现在使用A .gitignore我想忽略*.json除中的文件以外的所有文件spec。我不想使用.gitignorein folder1folder2因为其中有很多,它们会添加很多,我敢肯定我会忘记将正确的.gitignore文件移到适当的位置。

另外,可能还有更多带有json文件的嵌套目录,并且此规则也需要应用于所有子目录。

那么,如何忽略某个子目录以外的所有类型的文件?

Answers:


302

!否定模式的可选前缀;先前模式排除的所有匹配文件将再次包含在内。如果否定的模式匹配,它将覆盖优先级较低的模式源。

http://schacon.github.com/git/gitignore.html

*.json
!spec/*.json

4
如果愿意,还可以在包含!/ *。json的规范中添加.gitignore。
大卫·米切尔

2
谢谢!尽管就我而言,我意识到我根本不想忽略我的spec目录中的任何内容。所以我能够摆脱一个非常简单的问题!spec。奇迹般有效。
亚历克斯·韦恩

7
虽然当spec是顶层目录(即/ spec)时Amber的答案有效,但当spec是子目录(例如/ a / spec或a / b / spec)时,Amber的答案对我不起作用。使用git 1.7.5.4
Peter Lewis

7
@PeterLewis(面向将来的访问者):这种情况可以通过在相关子目录中创建一个.gitignore文件来处理。
cmbuckley,2012年

3
对我来说,这种解决方案只直接忽略了json文件spec,而不是somedir问题子目录中的文件。我需要使用!spec/**/*.json以确保more_mocks.json也已提交。
利斯,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.