guide
用 .git/info/exclude 编写只属于自己的忽略规则
说明如何在不修改 .gitignore 的情况下,把只作用于单个仓库的个人忽略规则写入 .git/info/exclude,以及适用场景和优先级。
.gitignore 会被提交并与所有人共享。但有时会有只想在这个仓库中由自己忽略的文件,比如个人笔记、实验脚本、自己的编辑器插件生成的目录等。这时使用的地方就是 .git/info/exclude。
位置在哪里
执行 git init 或 git clone 后,会默认创建 .git/info/exclude 文件。它是一个只有几行注释的空文件。
cat .git/info/exclude
# git ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# ...
它位于 .git 目录中,因此不会被提交,push 后也不会传给其他人。 语法与 .gitignore 完全相同。如果想知道确切位置(包括使用多个工作树的情况),可以用 git rev-parse --git-path info/exclude 查看。
什么时候使用
| 场景 | 示例 | 推荐位置 |
|---|---|---|
| 只在这个仓库中使用的个人文件 | notes.md, scratch/, todo.txt | .git/info/exclude |
| 所有仓库通用的个人文件 | .DS_Store, *.swp | 全局 gitignore |
| 所有团队成员都需要的规则 | node_modules/, dist/, .env | .gitignore |
在为他人的仓库做贡献时尤其有用。如果为了拦截自己工具产生的文件而修改项目的 .gitignore,审阅者可能并不希望有这样的改动。写进 .git/info/exclude 就不会触及提交历史。
echo 'scratch/' >> .git/info/exclude
echo '.my-plugin-cache/' >> .git/info/exclude
git status # 不再显示
优先级
在各种规则来源中,.git/info/exclude 的优先级低于 .gitignore,高于全局文件。
- 命令行模式
.gitignore(下层目录的文件覆盖上层).git/info/excludecore.excludesFile
因此,无法用 .git/info/exclude 中的 ! 规则恢复被 .gitignore 忽略的文件。实际验证结果如下。
# .gitignore : x
# .git/info/exclude : !x
$ git check-ignore -v x
.gitignore:1:x x
注意事项
- 对已经被跟踪的文件没有效果。与 .gitignore 一样,忽略规则只作用于未被跟踪的文件。
- 重新 clone 后,这个文件会恢复为默认状态。如果在多台电脑上需要相同的规则,使用全局 gitignore 更好。
- 如果把仓库复制到共享文件夹使用,连同
.git目录一起复制时,规则也会随之带过去。
参考
- gitignore 官方文档:$GIT_DIR/info/exclude
- GitHub Docs: Excluding local files without creating a .gitignore file
- 核实日期:2026-09-23 (用 git 2.50.1 验证优先级示例)