Git避免提交.DS_Store

今天发现在macOS上用Git提交时,会提示.DS_Store文件没有提交.

1
2
3
4
5
6
7
% git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
.DS_Store

nothing added to commit but untracked files present (use "git add" to track)

.DS_Store是macOS保存文件夹的自定义属性的隐藏文件,并没有什么用,但我也不太想禁止这个文件的生成. 所以可以用.gitignore文件配置需要忽略的文件.

.gitignore文件

首先在当前目录下创建.gitignore文件:

1
% touch .gitignore

打开.gitignore

1
% open .gitignore

在文件中添加以下内容并保存:

1
2
.DS_Store
*/.DS_Store

完成以上步骤后,当前目录及其子目录的.DS_Store提交时就会被忽略了.

全局配置

为了该配置对所有仓库都生效,需要全局配置.

创建~/.gitignore_global文件:

1
% touch ~/.gitignore_global

打开~/.gitignore_global

1
% open ~/.gitignore_global

添加忽略配置,以下为常用配置:

1
2
.DS_Store
.vscode

把该文件设置为全局配置忽略文件:

1
% git config --global core.excludesfile ~/.gitignore_global

在根目录下的.gitconfig文件中添加以下内容同样可以达到上个步骤的目的:

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

完成以上步骤后,配置成功.

删除已提交的.DS_Store

子目录中可能有已经提交的.DS_Store,所以删掉它们!

1
2
% find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
rm 'code/.DS_Store'

最后提交一下.gitignore

1
2
3
4
5
% git add .gitignore
% git commit -m "deleted .DS_Store"
% git status
On branch master
nothing to commit, working tree clean

大功告成,非常完美!