平时说忽略文件,大家第一反应都是 .gitignore。这没错,但并不完整。
Git 其实还留了一个更适合“只在我这台机器上生效”的位置:.git/info/exclude。这个文件和 .gitignore 用的是同一套规则,区别不在写法,在作用范围。
如果一句话概括:
.gitignore适合团队共享规则- 全局
.gitignore适合你在所有仓库里都想忽略的东西 .git/info/exclude适合当前仓库、但只对你自己有意义的东西
.agents/ 就很适合拿来讲这件事。
什么时间该用 .git/info/exclude
你可以用一个很简单的判断标准:
这个文件或目录是不是只对当前仓库有意义,而且没必要让别人跟着一起忽略。
符合这个条件时,优先考虑 .git/info/exclude。
比如在这个博客仓库里,如果你本地接了 Codex、Claude Code 或别的 agent 工具,可能会临时放一个 .agents/ 目录,里面是你自己的代理配置、脚本、草稿提示词,甚至是本地调试残留。
这类东西有几个特点:
- 只在这个仓库里有意义
- 往往和你的个人工作流绑定
- 不属于项目源码,也不是团队约定的一部分
- 你希望
git status别老把它们列出来
这种时候,.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 适合那种“我在哪个仓库都不想看见它”的东西,比如:
.DS_Store- 编辑器临时文件
- 系统生成的缓存文件
但 .agents/ 不是这种东西。
你可能只会在这个仓库里放 .agents/,别的仓库根本没有这个目录。就算也有,同名目录里装的东西也未必是一类。
把它放进全局 .gitignore 的问题在于,它把一个仓库相关的决定,硬拉成了一个机器级别的默认规则。后面你排查某个仓库为什么有文件看不见时,反而更绕。
简单说:
- 全局
.gitignore解决“我这个人到处都不想看见什么” .git/info/exclude解决“我只在这个仓库里不想看见什么”
.agents/ 更像后者。
为什么不是项目的 .gitignore
这个问题其实更关键。
项目里的 .gitignore 会进版本库,会影响所有协作者。所以只要你把 .agents/ 写进去,表达的意思就不是“我本地不想跟踪这个目录”,而是“这个仓库的所有人都应该忽略它”。
这在很多时候并不合适。
还是拿 .agents/ 来说:
- 不是每个人都在用 agent 工具
- 不同人可能用不同目录名和不同工作流
- 团队未必想默认忽略这个目录
- 某一天项目甚至可能真的想把一部分 agent 配置纳入版本管理
如果现在就把 .agents/ 放进项目 .gitignore,等于你替整个仓库做了决定,而且这个决定大概率只是出于你自己的本地使用习惯。
这也是 .git/info/exclude 最顺手的地方:
它解决你的噪音,但不把你的偏好提交给别人。
放到这个项目里看,应该怎么理解
这个仓库当前的 .gitignore 里放的是很典型的共享规则:
dist/.astro/node_modules/.env.DS_Store
这些都属于“谁来开发都应该忽略”的内容,放在项目 .gitignore 里很合理。
但如果你只是想在仓库根目录下放一个自己的 .agents/,用来存本地 agent 配置、临时命令或者实验文件,那它更像是你自己的工作台抽屉,不是项目公共约定。
这时候最合适的做法通常就是:
echo '.agents/' >> .git/info/exclude
这样处理以后:
- 你的
git status会干净很多 - 仓库里的
.gitignore不会被塞进个人偏好 - 别人也不会被迫接受这个忽略规则
小结
如果你遇到的是 .agents/ 这种目录,最实用的判断方式不是“Git 支不支持忽略”,而是先问一句:
这是团队规则,还是我自己的本地习惯?
是团队规则,就写进项目 .gitignore。
是你所有仓库都通用的习惯,就放全局 .gitignore。
只在当前仓库、只对你自己有意义,就写进 .git/info/exclude。
.agents/ 这种东西,通常正好落在第三类。