macOS の .DS_Store ファイルを Git で無視する方法

git で .DS_Store ファイルを適切に無視する方法。ローカルおよびグローバル gitignore のアプローチと、既に追跡済みの .DS_Store ファイルの削除方法を解説します。

System

詳細な説明

.DS_Store(Desktop Services Store)は、macOS の Finder が自動的に作成する隠しファイルで、開いたすべてのディレクトリに生成されます。アイコン位置、表示設定、背景画像などのカスタムフォルダ属性を保存します。git リポジトリでは完全に不要であり、意味のない差分ノイズを生じさせます。

問題点:

チーム内のすべての macOS 開発者が .DS_Store ファイルを生成します。一人でも無視し忘れると、コミットされてマージコンフリクトを引き起こします。Finder はすべてのディレクトリに作成するため、1つのリポジトリに数十のこれらのファイルが蓄積される可能性があります。

ローカルプロジェクト .gitignore アプローチ:

プロジェクトの .gitignore に以下のパターンを追加します:

.DS_Store
**/.DS_Store

**/.DS_Store パターンですべてのサブディレクトリ内のファイルを捕捉します。ルートレベルの .DS_Store パターンは **/ を使用する場合は技術的に冗長ですが、明確さのために両方含める開発者が多いです。

グローバル gitignore アプローチ(推奨):

.DS_Store はオペレーティングシステムのアーティファクトなので、最もクリーンな解決策はすべてのリポジトリに適用されるグローバル gitignore を設定することです:

git config --global core.excludesFile ~/.gitignore_global

そして .DS_Store~/.gitignore_global に追加します。こうすることで、個々のプロジェクトの .gitignore に追加する必要がなくなり、macOS 以外のチームメイトが macOS 固有のパターンに煩わされることもありません。

既に追跡済みの .DS_Store ファイルの削除:

.DS_Store ファイルが既にコミットされている場合、.gitignore に追加しても削除されません。明示的に追跡を解除する必要があります:

git rm --cached **/.DS_Store
git commit -m "Remove tracked .DS_Store files"

--cached フラグを使うと、ローカルファイルを削除せずに git から削除されます。このコミット後、.gitignore ルールが将来の操作に対して有効になります。

無視すべきその他の macOS ファイル: .AppleDouble.LSOverrideIcon\r._*(非ネイティブファイルシステムで作成されるリソースフォーク)、.Spotlight-V100.Trashes

ユースケース

macOS と Linux の開発者がいるクロスプラットフォームチームが、.DS_Store のマージコンフリクトに悩まされており、これらのシステムファイルを恒久的に除外するための解決策を必要としています。

試してみる — .gitignore Generator

フルツールを開く