guide

设置全局 gitignore (core.excludesFile)

说明如何设置 core.excludesFile,让 macOS .DS_Store、编辑器文件等由个人环境产生的文件在所有仓库中被忽略,以及默认路径。

.DS_StoreThumbs.db.idea/workspace.xml*.swp 这类文件并非因项目而生,而是因我的电脑和我的编辑器而产生。与其在每个仓库中重复添加这些规则,不如只写一次,这个地方就是全局 gitignore。

默认路径

即使不做任何设置,git 也会把以下文件作为全局忽略列表读取。

也就是说,在大多数 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 模板放在全局,以及合并到项目模板中这两种做法。

实践中,以下标准比较稳妥。

优先级

在四种规则来源中,全局文件的优先级最低。即使在全局中忽略了 *.log,只要项目 .gitignore 中有 !keep.log,项目这边就会获胜。如果不确定哪条规则生效,运行 git check-ignore -v <路径> 即可。如果输出开头出现全局文件的路径,就说明是全局规则做出的决定。

参考

← 上一篇gitignore 的优先级与否定(!)模式