
GitリポジトリからDS_Storeファイルを削除する方法
MacプラットフォームでGitを使っている場合、GitリポジトリでDS_Storeファイルを見かけたことがあるかもしれません。これらのファイルはGitリポジトリを煩雑にし、煩雑にすることがあります。また、.DS_StoreファイルがGitリポジトリで管理されているために不要な競合が発生し、「.DS_Storeファイルと.DS_Storeファイルにツリー競合がありました」といったエラーメッセージが表示されることもあります。.DS_StoreファイルはほとんどのGitリポジトリでは不要であり、通常は問題を引き起こすだけなので、Gitリポジトリから.DS_Storeファイルを削除するのは当然のことです。
まず、DS_Storeファイルとは何か疑問に思われるかもしれませんが、これは基本的にMac上のフォルダ固有のメタデータを含むファイルです。つまり、.DS_Storeファイルには、表示タイプ、ファイル/フォルダのサイズ、サムネイル情報、フォルダレイアウト、そしてMac上の特定のフォルダに対するFinderレベルのカスタマイズなど、あらゆるメタデータが含まれています。.DS_Storeファイルはファイル名の先頭に.が付くため、Finderからは見えません(事実上隠しファイルになります)。しかし、コマンドラインや、コマンドラインツール、あるいはgitなどのリポジトリマネージャでは、デフォルトでディレクトリ内のすべてのファイル(隠しファイルも含む)が表示されます。
.DS_Store ファイルは Finder では便利ですが、Git リポジトリに保存するのはあまり便利ではありません。Git リポジトリからすべての DS_Store ファイルを削除する方法と、将来の Git リポジトリにも保存されないようにする方法を確認しましょう。
Gitリポジトリから既存の.DS_Storeファイルを削除する方法
- ターミナルを開き、.DS_Storeファイルを消去したいgitリポジトリディレクトリに移動します。
- 次のコマンド文字列を入力します。
find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
これにより、.DS_Store ファイルが検出され、削除されます。
さらに進んで、別の種類の find コマンドを使用して Mac からすべての DS_Store ファイルを削除することもできますが、これを行うと Finder ウィンドウとフォルダーのカスタマイズがすべて失われるため、この方法は特にお勧めできません。
Gitで.DS_Storeファイルを無視する方法
さらに一歩進んで、gitがDS_Storeファイルをメンテナンスしてコミットするのを最初から阻止し、完全に無視するようにしてみましょう。これは、アクティブリポジトリディレクトリ内の.gitignoreファイルを変更(または作成)することで実現できます。
echo .DS_Store >> .gitignore
ここで、.gitignore ファイルをリポジトリに追加し、変更をコミットします。
git add .gitignore
git commit -m 'Ignoring .DS_Store Files'
–
.DS_Store ファイルの作成や混乱に関する問題が発生するのは git だけではありません。また、これらのファイルを無視することでメリットが得られる場合もあります。Mac で作成された zip アーカイブから DS_Store ファイルを除外することで、混乱を軽減できます(マシン固有のメタデータが zip ファイルに保存されるのを防ぐこともできます)。また、.DS_Store ファイルはネットワーク環境では問題になるかもしれませんが、必要に応じて defaults コマンドを使用して、ネットワークボリュームでの DS_Store ファイルの作成をブロックできます。