全局 .gitignore_global 需满足三条件才生效:文件存在且可读、core.excludesfile 正确配置(大小写敏感)、目标文件未被 git 跟踪;创建后须用 git config --global core.excludesfile ~/.gitignore_global 启用,并通过 git check-ignore -v -g 验证。

全局 .gitignore 不是“加进去就生效”,它必须满足三个硬条件:文件存在且可读、core.excludesFile 配置指向正确路径、被忽略的文件尚未被 Git 跟踪过。
怎么创建并启用全局 .gitignore_global
Git 不会自动生成这个文件,也不会校验路径有效性——配置写了就认,但文件不存在等于没生效。
- 在终端执行
touch ~/.gitignore_global创建空文件(macOS/Linux);Windows 用户用notepad %USERPROFILE%\.gitignore_global - 往里面写规则,比如:
.DS_Store .vscode/ *.swp *~
注意每行一条,不带空格前缀,#开头是注释 - 运行
git config --global core.excludesFile ~/.gitignore_global(注意是excludesFile,不是excludesfile—— 大小写敏感,拼错就静默失效) - 验证是否配对:
git config --global core.excludesFile应输出完整路径,如/Users/xxx/.gitignore_global
为什么 .DS_Store 还在 git status 里?
因为文件已被 Git 跟踪过。全局规则只影响「未跟踪」文件,对已提交或已暂存的文件完全无效。
- 先清缓存:
git rm -r --cached .DS_Store(进任意仓库根目录执行) - 再删磁盘残留:
find . -name '.DS_Store' -type f -delete - 如果项目里还有子模块或深层嵌套,得补上
git rm -r --cached '**/.DS_Store'(需 Git 2.22+) - 最后
git add . && git commit -m "drop .DS_Store"
git check-ignore 查不出全局规则?
git check-ignore -v path/to/file 默认只查项目级 .gitignore 和 .git/info/exclude,根本不会碰全局文件。
- 要查全局规则,必须加
-g参数:git check-ignore -v -g .DS_Store - 如果返回空,说明要么没配
core.excludesFile,要么文件路径不对,要么该文件当前处于「已跟踪」状态(此时 ignore 规则压根不参与判断) - 想看所有生效规则链路,用
git check-ignore -v --no-index .DS_Store(--no-index强制跳过索引检查,暴露真实匹配过程)
哪些内容绝对不该塞进全局 .gitignore
全局规则优先级低于项目级 .gitignore,但一旦写错,会在所有仓库悄悄生效,极难排查。
- 别写
node_modules/、venv/、dist/—— 这些因项目而异,有的要提交(如预构建的dist),有的不该(如 Python 缓存),应由各项目自己管 - 别写
*.log或logs/—— 日志是否提交取决于服务部署方式,不是通用逻辑 - 别依赖通配符跨层级乱匹配,比如
**/config.local,可能意外屏蔽掉你真要提交的配置文件 - 真正适合全局的只有四类:
.DS_Store、.vscode/、.idea/、*~(vim 交换文件)—— 纯属编辑器/系统产物,无业务语义
最常被忽略的一点:改完 ~/.gitignore_global 后,已有仓库的 git status 不会自动刷新忽略状态,得等下次 git add 或 git status 时才重新评估——但已跟踪的文件永远不受新规则影响,这点必须手动干预。











