记录一下 Git 全局忽略 .DS_Store 的设置。


macOS 中每个文件夹下都存在一个 .DS_Store 文件,是一种用来存储该文件夹下的文件图标位置属性、文件位置等元数据信息的系统文件。平时我们看不见 .DS_Store,它的存在也不影响使用,但是 Git 仓库会记录下它。有时候我根本没有修改任何文件,仅仅是移动了一下文件,打开 GitHub Desktop,就会提醒我 .DS_Store 修改了,强迫症表示非常难受。同时,由于 .DS_Store 会存储元数据,可能有一些信息在不经意间泄露出去,不太安全。

虽然可以单独在每个 Git 仓库新建 .gitignore 文件来忽略 .DS_Store,但还是全局忽略来得直截了当一些。

# 全局忽略 .DS_Store

打开终端(Terminal),进入用户(Home)文件夹。

  1. 查看 Git 配置情况
git config --list
1

默认输出结果应该是这样的:

credential.helper=osxkeychain
filter.lfs.clean=git-lfs clean -- %f
filter.lfs.smudge=git-lfs smudge -- %f
filter.lfs.process=git-lfs filter-process
filter.lfs.required=true
1
2
3
4
5
  1. 在用户文件夹下新建一个文件 .gitignore_global
touch ~/.gitignore_global
1

或者手动新建也可以。

  1. 修改 .gitignore_global,写入如下内容:
.DS_Store
**/.DS_Store
.DS_Store?
1
2
3

如果还需要忽略其他类型的文件,可以前往 gitignore.io(opens new window) 获取相应配置文件。

  1. 对 Git 进行全局设置:
git config --global core.excludesfile ~/.gitignore_global
1

然后就会发现 .gitconfig 文件里增加了 2 行:

[core]
	excludesfile = /Users/[username]/.gitignore_global
1
2

这样,就将 .DS_Store 加入了全局忽略列表。在这之后,Git 就会忽略电脑中所有的 .DS_Store 文件,但是之前仓库里的 .DS_Store 文件还在,需要进行删除。

# 删除已有仓库中的 .DS_Store

删除已有 Git 仓库中的 .DS_Store 其实很简单,进入 Git 仓库,执行:

find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch
1

就会删除该目录下所有的 .DS_Store 文件。比如我的博客仓库,输出结果就是这样的:

rm 'docs/.DS_Store'
rm 'docs/.vuepress/.DS_Store'
rm 'docs/.vuepress/public/.DS_Store'
rm 'docs/.vuepress/public/assets/.DS_Store'
rm 'docs/.vuepress/public/assets/img/.DS_Store'
rm 'docs/.vuepress/public/images/.DS_Store'
rm 'docs/_posts/.DS_Store'
rm 'docs/about/.DS_Store'
1
2
3
4
5
6
7
8

看见这个输出结果就很爽,不用一个一个手动删除,一下子就全部删除掉了,再也不用忍受烦人的 .DS_Store 了!

# 参考