gitignore的问题否定了目录,但随后在子目录中重新包含了一个文件

时间:2014-11-10 23:54:00

标签: git gitignore

我在忽略目录时遇到了问题,但是在我忽略的同一目录的子目录中重新包含了一个文件。

  • WORKS

文件夹设置:

folder/
   commit-me.txt
   ignore-me.txt

的.gitignore:

folder/*
!folder/commit-me.txt

  • DOESN' WORK

文件夹设置:

folder/
   sub/
       commit-me.txt
       ignore-me.txt
   ignore-me.txt

的.gitignore:

folder/*
!folder/sub/commit-me.txt

2 个答案:

答案 0 :(得分:1)

Git不够聪明,无法忽略该子目录,因为你在其中取消了一个文件。

这有效:

folder/*
folder/sub/*
!folder/sub/
!folder/sub/commit-me.txt

答案 1 :(得分:1)

在您进入至少数百个文件夹之前,最简单的方法是在!*/时将.gitignore添加到最后。这将阻止git完全忽略任何整个目录,除非你稍后告诉它。所以你的将是

folder/**
!folder/sub/commit-me.txt
!*/

后来的!*/规范告诉git,无论你之前说过什么,它都应该检查目录内容。因此,由于git不跟踪目录,它只关心它们作为实际内容的路径名组件,它不会忽略一个目标,它本身会导致任何事情被提交,它只会让git不会跳过任何内容(之前匹配的目录在搜索过程中。

**表示"匹配任意数量的目录级别"从git 1.8.4开始,匹配由git本身完成,因此它可以保证在任何地方都能正常工作。

当您使用!*/来避免整个目录时忽略***之间的区别很重要:folder/*只会直接匹配名称folder - 从不匹配子文件夹中的文件名,但由于忽略文件夹会忽略其全部内容,因此这一点并不明显。

一旦你和the gitignore rules在一些不同的情况下一起玩,他们就会很有道理,如果你在理解他们结束了比任何散文更好的学习来源之后我见过的描述。