更换了 Macbook Pro 后开发变得方便,但是很多刚转到 macOS 的开发者会发现,使用『Git』上传代码时会有一些名为「.DS_Store」的隐藏文件,而你在『Finder』中还不一定能找到它,即使找到了,你却不一定能够打开它。
这个「.DS_Store」到底是何方神圣?
.DS_Store 的英文全称 Desktop Services Store,是一种由 Apple 公司的 Mac OS X 操作系统所创造的隐藏文件,目的在于存贮目录的自定义属性,例如文件们的图标位置或者是背景色的选择。相当于 Windows 下的「desktop.ini」文件。
尽管这些文件本来是为『Finder』所使用,但它们被设想作为一种更通用的有关显示设置的元数据存储,诸如图标位置和视图设置。
因此「.DS_Store」在代码版本控制中并不需要,在网络传输文件中如果包含了「.DS_Store」甚至还会泄漏一些不必要的信息。
所以在项目中我常常会删除或隐藏「.DS_Store」,再上传到代码仓库。
Delete .DS_Store
如果你的项目中已经存在「.DS_Store」,那么就需要将它删除,可以在『Terminal』中执行以下命令:
➜ find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
当前项目中的所有「.DS_Store」就会被清除掉了。
Add to Git Ignore List
如果你常使用『Git』来提交代码,那么你一定对「.gitignore」不陌生,它就是提交代码时的忽略清单,『Git』根据该文件判断不将哪些文件提交至代码仓库。
打开该文件,在末尾追加如下内容:
# macOS Desktop Services Store
*/.DS_Store
其实并不难看懂,#
后面的内容是注释,所以实际上只有一行内容,就是匹配当前目录下的所有子目录的「.DS_Store」文件,这样,在使用『Git』提交代码时,无论项目中是否有「.DS_Store」,都不会将它提交上去了。
Prevent .DS_Store File Creation
我通常只会在项目中使用上述两种方法移除并忽略「.DS_Store」文件,你可能想一劳永逸,禁止所有目录生成「.DS_Store」文件。
在收到用户们对远程系统上「.DS_Store」文件会自动创建的投诉之后,Apple 公司在其技术支持站点发表了一篇文章,详细讲述了如何禁止远程「.DS_Store」文件利用网络连接进行的创建。
还是打开『Terminal』,执行以下命令:
➜ defaults write com.apple.desktopservices DSDontWriteNetworkStores true
即可禁用「.DS_Store」文件的生成。
恢复「.DS_Store」文件的生成,可执行:
➜ defaults delete com.apple.desktopservices DSDontWriteNetworkStores
需要注意的是,该方法是不在是网络挂载的盘生成,对本地是无效的。