正确配置是创建并启用全局排除文件 ~/.gitignore_global(macOS/Linux)或 %USERPROFILE%.gitignore_global(Windows),再执行 git config –global core.excludesfile 指向它;若 .DS_Store 已被跟踪,需先 git rm –cached .DS_Store 再提交;团队协作应以项目级 .gitignore 为兜底。

Git 全局忽略 .DS_Store 的正确配置位置
全局忽略不是改项目里的 .gitignore,而是配在 Git 自己的全局排除文件里。这个文件默认不存在,得手动创建,路径是 ~/.gitignore_global(macOS/Linux)或 %USERPROFILE%.gitignore_global(Windows)。Git 只有在显式启用后才读它——光建文件没用。
- 运行
git config --global core.excludesfile ~/.gitignore_global(macOS/Linux)或git config --global core.excludesfile "%USERPROFILE%.gitignore_global"(Windows)来激活 - 如果之前设过别的全局 ignore 文件,这条命令会覆盖;不确定的话先查:
git config --global core.excludesfile - 配置生效后,所有新克隆 / 新建的仓库都会自动忽略匹配项,无需重复操作
为什么 .DS_Store 还是被 commit 了
常见原因是它已经被 Git 跟踪了。Git 的忽略规则只对「未跟踪」文件生效;一旦 .DS_Store 出现在 git status 里(哪怕标为 deleted),说明它曾被 add 过。此时加 ignore 没用,得先停跟踪。
- 删掉已跟踪的
.DS_Store:运行git rm --cached .DS_Store(注意双横线和空格) - 如果目录下还有嵌套的:
git rm --cached -r .DS_Store - 提交这次删除:
git commit -m "remove tracked .DS_Store" - 再确认是否真不出现了:
git status --ignored(加--ignored才能看到被忽略但未跟踪的文件)
macOS 下更彻底的全局忽略方案
除了 .DS_Store,Finder 生成的其他隐藏文件(如 .Trashes、.Spotlight-V100)也常惹麻烦。与其单个列,不如直接忽略所有以 . 开头的文件和目录——但要注意别误伤 .git 或 .prettierrc 这类配置文件。
- 在
~/.gitignore_global里写:**/.DS_Store、**/.Trashes、**/.Spotlight-V100 - 避免写
.*—— 它会匹配.git,导致仓库损坏 - 用
**/前缀确保递归生效,否则只忽略当前目录下的.DS_Store - 改完记得重新加载:Git 不缓存该文件,下次
git status就生效
团队协作时别依赖全局 ignore
全局配置只影响你本地,队友不会自动同步。如果项目里反复出现 .DS_Store,说明有人没配,或者用了不同系统(比如 Windows 用户根本不会生成它)。这时候得靠项目级约束。
- 把
.DS_Store加进项目根目录的.gitignore,这是最稳妥的兜底方式 - 配合 pre-commit 钩子检查:
git ls-files | grep '.DS_Store$',非零则退出 - CI 流水线里加一步:
git status --ignored --porcelain | grep '.DS_Store',有输出就报错
真正麻烦的从来不是怎么加 ignore,而是怎么让忽略持续生效——尤其当文件已经进过暂存区、或者别人用 GUI 工具绕过命令行时。