.DS_StoreをGitでアップしない方法|macユーザー向け
1. なぜ .DS_Store が問題になるのか?
.DS_Store は、macOSのFinderが各フォルダの表示設定を保存するために自動生成する隠しファイルです。
通常は気にしなくても構いませんが、Gitで管理しているプロジェクトに含まれると、他の開発者環境に不要なファイルを配布してしまいます。
2. .gitignore に追加してアップロードを防ぐ
もっとも基本的な対策は、プロジェクト直下にある .gitignore に .DS_Store を記述することです。
# macOS用の無視設定
.DS_Store
**/.DS_Store
これで新規に生成された .DS_Store は自動的にGit追跡対象外になります。
3. すでにコミットされている .DS_Store を削除する
過去にコミット済みの .DS_Store をリポジトリから削除するには、以下のコマンドを実行します。
git rm -r --cached .DS_Store
git commit -m "Remove .DS_Store files from repo"
もし複数階層に存在する場合:
find . -name .DS_Store -print0 | xargs -0 git rm -r --cached
git commit -m "Clean all .DS_Store files"
4. 全リポジトリ共通で無視する(グローバル設定)
毎回書くのが面倒な場合は、以下の設定を一度だけ行えば、すべてのリポジトリで自動的に無視されます。
git config --global core.excludesfile ~/.gitignore_global
echo -e ".DS_Store\n**/.DS_Store\n._*\nIcon?\n" >> ~/.gitignore_global
これにより、以後作成するGitプロジェクトでも .DS_Store がアップロードされません。
5. Finderに .DS_Store を作らせない設定(任意)
ネットワークドライブ(NASや共有フォルダ)上に .DS_Store を作らせたくない場合は、以下を実行:
defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool true
killall Finder
これにより、共有ディスク上ではFinderが .DS_Store を作成しなくなります(ローカルディスク上では作成されることがあります)。
6. 履歴から完全に削除する場合(上級者向け)
過去コミットにも .DS_Store が含まれていて、履歴から完全に消したい場合は以下のツールがあるようです:
例(filter-repo使用):
git filter-repo --path .DS_Store --invert-paths
7. まとめ
.gitignoreに.DS_Storeを追加するだけで再発防止できる- 既存のファイルは
git rm --cachedで削除 - グローバル設定にすれば全リポジトリで共通化できる
- Finder設定で生成そのものを抑止可能