我们在github上经常看到某些仓库里面包含了.DS_Store文件,或者某些sdk的压缩包里面可以看到,这都是由于随着git的提交把这类文件也提交到仓库,压缩也是一样,压缩这个先留着后面处理。
.DS_Store 文件,是用于存放目录自定义属性(如图表、位置属性)等元数据信息的系统文件,由 Finder 自动创建。虽然所有 . 开头的文件/文件夹默认隐藏(可以使用 Command + Shift + . 显示所有隐藏文件),平时我们看不见,也不影响使用,但是 Git 仍会将其记录下来,即便我只是在同目录下移动文件。多人协作时,Git会发生.DS_Store冲突,这个比较难搞,而且极可能泄露一些信息,综合起来最好的处理办法是代码仓库不要有这样的文件。
最直接的办法使用可视化提交工具,适合于任何人,提交时候不要勾选.DS_Store。例如Android studio自带的可视化工具,HBuilder自带的可视化工具,以及其他单纯的代码管理工具。
不论是git/svn,对于无关的文件包括项目编译过程中的中间文件,我们都选择忽略处理,这样就不会提交到仓库了。
仅针对git的处理就是设置.gitignore文件。
特别说明:
对于一些常用的系统、工程文件的.gitignore文件可以参考这个网站进行设置,这里有很多模板。
忽略配置.DS_Store文件,在git工程文件夹中新建.gitignore文件,在文件中添加:
.DS_Store
**/.DS_Store
.DS_Store?
已经提交的内容,希望git能够忽略,但同时并不会删除本地文件,需要在控制台输入以下命令:
git rm -r --cached $file_path
虽然每个项目配.gitignore文件可以成功,但是每个项目都需要配置就有点烦。我们可以在git的全局进行配置来忽略.DS_Store文件。
设置之前我们先看下现在的git config配置情况
git config --list
实际上git配置情况可以在 ~/.gitconfig 文件中查看。
vi ~/.gitconfig
通过 :q! 退出后,我们需要建立一个文件,把需要全局忽略的文件路径写入其中。该文件起名为.gitignore_global:
打开终端,在某一个位置创建 .gitignore_global 文件(建议在当前用户目录下):
touch ~/.gitignore_global
打开文件
vi ~/.gitignore_global
或者
open ~/.gitignore_global
修改该文件,填入与上方 .gitignore 示例一样的内容
.DS_Store
**/.DS_Store
.DS_Store?
然后对git进行全局设置,让git忽略.gitignore_global中的所有文件:
git config --global core.excludesfile ~/.gitignore_global
这样就不用每个git目录都设置忽略.DS_Store文件了!
此时终端输入:
git config --list
如果有下面这行:
core.excludesfile = /Users/[username]/.gitignore_global
就说明已经添加成功了,以后 Git 就不会再记录 .DS_Store 了。
即便后续不会再记录,仓库中的 .DS_Store 都还在,需要手动删除。
终端进入仓库目录,输入:
find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
这样就删除了所有该仓库的 .DS_Store 。重新提交推送即可(git add . git commit git push)。
本文参考 Mac中Git如何忽略.DS_Store文件,有修改