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

Ale*_*yne 178 git gitignore

我有这样的目录结构:

    • 文件夹1
      • abc.json
      • def.json
      • somedir
        • more.json
    • 文件夹2
      • qwe.json
      • rty.json
    • 规范
      • mock1.json
      • mock2.json
      • somedir
        • more_mocks.json

现在使用.gitignore我想忽略*.json除了中的文件之外的所有文件spec.我不想使用.gitignorein folder1,folder2因为有很多这些并且它们会被添加到很多,我相信我会忘记移动正确的.gitignore文件.

此外,json文件可能有更多嵌套目录,此规则也需要应用于所有子目录.

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

Amb*_*ber 280

一个!否定模式的可选前缀; 之前模式排除的任何匹配文件将再次包含在内.如果否定模式匹配,则将覆盖较低优先级模式源.

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

*.json
!spec/*.json
Run Code Online (Sandbox Code Playgroud)

  • 虽然Amber的答案适用于spec是顶级目录(即/ spec)的情况,但当spec是子目录时,例如/ a/spec或a/b/spec,它对我不起作用.使用git 1.7.5.4 (7认同)
  • @PeterLewis(对于未来的访问者):可以通过在相关子目录中创建.gitignore文件来处理这种情况. (7认同)
  • 如果您愿意,还可以将.gitignore添加到包含!/*.json的规范中. (4认同)
  • 对我来说,这种解决方案只直接忽略了spec中的json文件,而不是问题中somedir子目录中的文件。我需要使用`!spec / ** / *。json`来确保`more_mocks.json`也被提交。 (3认同)
  • 谢谢!尽管就我而言,我意识到我根本不想忽略我的spec目录中的任何内容。因此,我能够摆脱一个非常简单的`!spec`。奇迹般有效。 (2认同)
  • 经过进一步检查,`!/assets/components/**` 效果更好;) (2认同)