相信很多朋友都用过 .gitignore,但是可能没留意到.ignore 文件也有不小用处
.gitignore 应该不用多说,我们把不想要提交的文件清单放进这个文件里面,
这样提交的时候不会放上去一堆不该提交的东西,这些文件也不会出现在变更清单里面,
保持变更清单的整洁。
现如今的 AI 编程工具,也非常尊重这个文件,并且有些过头了,
我们经常会在与模型的对话中用 @ 来标记一些文件,输入路径或文件名的关键字,
就可以定位到我们想要的文件:

但是出于对 .gitignore 的「尊重」,你如果把想 @ 的文件放进了 .gitignore ,
那么抱歉,这个文件就进不了候选清单了,我们得自己手敲完整路径。
最直观的做法应该是把文件从 .gitignore 中移除,但是这样不一定合理,
因为这样搞了以后,它就会回到变更清单等待我们提交,小文件可能还无所谓,
大的、不适合放 git 的文件就比较讨厌了。
今天认识了一个新朋友,可以帮我们完美解决这个问题:.ignore 文件。
.ignore 文件比 .gitignore 更高级一点,感觉如果 .gitignore 是界王的话,
那么 .ignore 就是大界王或者界王神。它神在哪里呢,对于一干 AI 编程工具,
它们都对这个文件有足够的尊重,如果写进 .ignore 文件,
效果会和 .gitignore 相同,使用 @ 搜不出来。但是 git 是完全不会理会这个文件的,
它只关注.gitignore 。我想这时大家就理解了它们俩的差别,以及我们要怎么利用这个差别。
通常我们在写 .gitignore 时,每行对应一个文件路径类型,路径或文件名符合特征的文件,
git 就不会去检查它有没有变化,这个就是它的基础用法。不过它还有一种高阶用法:
反向标注,也就是符合某一特征的文件,不能忽略,写法也很简单,特征前面加个感叹号:
# user files
!files/
!out/
我们把上面的内容写进 .ignore ,那么 .ignore 会提示 agent 不要忽视这些路径的文件,
.gitignore 里保留这些文件的「非叹号版本」:
# user files
files/
out/
git 不会理会 .ignore ,所以变更清单不会添加这些文件,
而 agent 们拿到了两个 ignore 文件,那么它们遵守哪个呢,答案是听界王神的,
也就是说 .ignore 中的配置生效,而这正是我们想要的。
如果你也有这样的需求:@ 某个需要加入 .gitignore 的文件,
那么 .ignore 我想是目前最好的选择。