靠北 .DS_Store 到底是什麼?該不該加入到版本控制內?

前言

.DS_Store 到底是什麼東西?它到底該不該加入到版本控制內?為什麼會有它呢?所以這一篇就簡單聊一下 .DS_Store 這個東西。

.DS_Store 是什麼?

.DS_Store 是 MacOS 作業系統專屬的隱藏文件,英文全稱為「Desktop Services Store」,如果你是 Microsoft Windows 開發者的話,你可以把它想像成是 desktop.ini,但這一篇主要是說明 .DS_Store 是什麼,因此 Microsoft Windows 就可以離開啦~

那麼由於 .DS_Store 本身是一個隱藏資料夾,那麼查看隱藏資料夾的方式是在 Finder 視窗按下組合按鈕 Command + Shift + . 即可以顯示(反之再按一次就會隱藏),但就算你這樣做你也會發現根本沒有辦法看到 .DS_Store。

因為 Finder 並不會直接顯示出 .DS_Store,而是你必須使用終端機並輸入以下指令才能看到

1
ls -la

.DS_Store

除此之外你也可以輸入 file 來查看 .DS_Store 是什麼類型的檔案

1
file .DS_Store

Desktop Services Store

那 .DS_Store 到底是什麼呢?簡單來講 .DS_Store 裡面主要儲存了一些資訊,例如:資料夾的圖標、視窗的設置等等,因此通常 .DS_Store 在每一個資料夾內都有,基本上就是隨處可見的等級了,但 .DS_Store 並不會佔用太多記憶體空間,所以通常來講是不用去特別理會它。

該不該把 .DS_Store 加入版本控制

其實這個答案非常淺顯易見,就是「不建議」加入版本控制內,就如同前面所言, .DS_Store 會記錄一些資訊,因此如果將 .DS_Store 加入到版本控制內時,是有可能發生一些資訊安全的問題(僅僅是有可能而已)。

因此許多 CLI 預設的 .gitignore 都會忽略 .DS_Store,以下舉例 Vite 的 .gitignore

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*

node_modules
dist
dist-ssr
*.local

# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?

但為了保護開發者,還是會建議 .gitignore 要將 .DS_Store 加入忽略清單內。

阻止 .DS_Store 的生成

當然也可以阻止 .DS_Store 的生成,只需要在終端機輸入以下指令

1
defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool TRUE

接下來重新啟動 Mac 就可以了。

若你想要恢復生成 .DS_Store,可以使用以下指令

1
defaults delete com.apple.desktopservices DSDontWriteNetworkStores

同上,恢復生成後要記得重新啟動 Mac

如果是想要搜尋 + 刪除當前 Mac 裡面所有 .DS_Store 檔案,可以使用以下指令

1
sudo find . -name ".DS_Store" -depth -exec rm {} \;  

基本上這樣子就不會一直長出 .DS_Store 了。

.DS_Store 該不該刪除或停用?

其實認真來講是不建議刪除或停用,儘管你是可以這樣做,也沒有任何問題。

但是除非你有什麼特別的原因,不然 .DS_Store 是不會影響你的效能的,通常也不會有太多的資安問題,除此之外 .DS_Store 主要也是幫你記錄一些資訊,如果你刪除的話可能會出現一些問題。

所以這個問題就留給你自己思考。

但有一點可以很明確的告知為了保護開發者,還是會建議 .gitignore 要將 .DS_Store 加入忽略清單內。

參考文獻

Liker 讚賞

這篇文章如果對你有幫助,你可以花 30 秒登入 LikeCoin 並點擊下方拍手按鈕(最多五下)免費支持與牡蠣鼓勵我。
或者你也可以考慮請我喝一杯咖啡

Google AD

撰寫一篇文章其實真的很花時間,如果你願意「關閉 Adblock (廣告阻擋器)」來支持我的話,我會非常感謝你 ヽ(・∀・)ノ