设置全局 gitignore (core.excludesFile)
说明如何设置 core.excludesFile,让 macOS .DS_Store、编辑器文件等由个人环境产生的文件在所有仓库中被忽略,以及默认路径。
.DS_Store、Thumbs.db、.idea/workspace.xml、*.swp 这类文件并非因项目而生,而是因我的电脑和我的编辑器而产生。与其在每个仓库中重复添加这些规则,不如只写一次,这个地方就是全局 gitignore。
默认路径
即使不做任何设置,git 也会把以下文件作为全局忽略列表读取。
$XDG_CONFIG_HOME/git/ignore- 如果
XDG_CONFIG_HOME为空或未设置,则为$HOME/.config/git/ignore
也就是说,在大多数 macOS、Linux 环境中,只需创建 ~/.config/git/ignore 文件即可。
mkdir -p ~/.config/git
printf '.DS_Store\n*.swp\n.idea/workspace.xml\n' >> ~/.config/git/ignore
想用其他文件时使用 core.excludesFile
要使用任意路径的文件,请设置 core.excludesFile。设置该值后,git 会读取该文件而不是默认路径。
# macOS / Linux
git config --global core.excludesFile ~/.gitignore_global
# Windows (PowerShell)
git config --global core.excludesFile "$env:USERPROFILE\.gitignore_global"
用以下命令确认设置是否生效。
git config --global --get core.excludesFile
如果没有输出值,说明尚未设置,此时使用上述默认路径。
哪些内容放在全局
适合放在全局的是无论在哪个项目中工作都会同样产生的个人文件。
| 类别 | 示例 | 推荐模板 |
|---|---|---|
| 操作系统 | .DS_Store, ._*, Thumbs.db, desktop.ini, *~ | macOS, Windows, Linux |
| 编辑器与 IDE 的个人状态 | *.swp, .idea/workspace.xml, .vscode/* 中的个人文件 | Vim, JetBrains, VisualStudioCode |
| 个人工具 | .envrc(direnv)、个人笔记目录 | 自行编写 |
在生成器中只选择 macOS、JetBrains 这类模板并复制结果,就可以直接用作全局文件的内容。
反之,构建结果、依赖目录、机密文件应放在项目的 .gitignore 中,而不是全局,因为这些规则需要作用于每一个获取仓库的人。
放在全局的局限
全局 gitignore 只对我的电脑生效。如果团队成员没有配置全局设置,他们的 .DS_Store 仍可能被提交。因此 GitHub 模板仓库同时介绍了把 Global 模板放在全局,以及合并到项目模板中这两种做法。
实践中,以下标准比较稳妥。
- 个人项目,或者能够把全局设置作为团队规范告知成员时,放在全局。
- 像开源项目这样无法约束贡献者时,至少把
.DS_Store、Thumbs.db也放进项目的 .gitignore。
优先级
在四种规则来源中,全局文件的优先级最低。即使在全局中忽略了 *.log,只要项目 .gitignore 中有 !keep.log,项目这边就会获胜。如果不确定哪条规则生效,运行 git check-ignore -v <路径> 即可。如果输出开头出现全局文件的路径,就说明是全局规则做出的决定。