什么时候该用 .git/info/exclude

2026/03/26

平时说忽略文件,大家第一反应都是 .gitignore。这没错,但并不完整。

Git 其实还留了一个更适合“只在我这台机器上生效”的位置:.git/info/exclude。这个文件和 .gitignore 用的是同一套规则,区别不在写法,在作用范围。

如果一句话概括:

.agents/ 就很适合拿来讲这件事。

什么时间该用 .git/info/exclude

你可以用一个很简单的判断标准:

这个文件或目录是不是只对当前仓库有意义,而且没必要让别人跟着一起忽略。

符合这个条件时,优先考虑 .git/info/exclude

比如在这个博客仓库里,如果你本地接了 Codex、Claude Code 或别的 agent 工具,可能会临时放一个 .agents/ 目录,里面是你自己的代理配置、脚本、草稿提示词,甚至是本地调试残留。

这类东西有几个特点:

这种时候,.git/info/exclude 就比另外两个地方更顺手。

怎么用

直接编辑 .git/info/exclude

.agents/

或者用命令追加一行:

echo '.agents/' >> .git/info/exclude

写完以后再看 git status,这个目录里的未跟踪文件就不会继续出现了。

如果你还想顺手忽略一些只在本地存在的东西,也可以一起加:

.agents/
.env.local
notes/

这里的规则和 .gitignore 一样,目录后面加 /,通配符也照常能用,所以学习成本基本没有。

要注意一点:.git/info/exclude 只能忽略还没被 Git 跟踪的文件。
如果 .agents/ 之前已经被提交过,再往这里写规则也不会生效。这种情况得先把它从索引里拿掉,再决定后面放哪儿。

为什么不是全局 .gitignore

全局 .gitignore 适合那种“我在哪个仓库都不想看见它”的东西,比如:

.agents/ 不是这种东西。

你可能只会在这个仓库里放 .agents/,别的仓库根本没有这个目录。就算也有,同名目录里装的东西也未必是一类。

把它放进全局 .gitignore 的问题在于,它把一个仓库相关的决定,硬拉成了一个机器级别的默认规则。后面你排查某个仓库为什么有文件看不见时,反而更绕。

简单说:

.agents/ 更像后者。

为什么不是项目的 .gitignore

这个问题其实更关键。

项目里的 .gitignore 会进版本库,会影响所有协作者。所以只要你把 .agents/ 写进去,表达的意思就不是“我本地不想跟踪这个目录”,而是“这个仓库的所有人都应该忽略它”。

这在很多时候并不合适。

还是拿 .agents/ 来说:

如果现在就把 .agents/ 放进项目 .gitignore,等于你替整个仓库做了决定,而且这个决定大概率只是出于你自己的本地使用习惯。

这也是 .git/info/exclude 最顺手的地方:
它解决你的噪音,但不把你的偏好提交给别人。

放到这个项目里看,应该怎么理解

这个仓库当前的 .gitignore 里放的是很典型的共享规则:

这些都属于“谁来开发都应该忽略”的内容,放在项目 .gitignore 里很合理。

但如果你只是想在仓库根目录下放一个自己的 .agents/,用来存本地 agent 配置、临时命令或者实验文件,那它更像是你自己的工作台抽屉,不是项目公共约定。

这时候最合适的做法通常就是:

echo '.agents/' >> .git/info/exclude

这样处理以后:

小结

如果你遇到的是 .agents/ 这种目录,最实用的判断方式不是“Git 支不支持忽略”,而是先问一句:

这是团队规则,还是我自己的本地习惯?

是团队规则,就写进项目 .gitignore
是你所有仓库都通用的习惯,就放全局 .gitignore
只在当前仓库、只对你自己有意义,就写进 .git/info/exclude

.agents/ 这种东西,通常正好落在第三类。

Edit this page on GitHub