【Git】Macで .DS_Store を無視するベストプラクティス(gitで困っている人向け)

目次

Mac を使って Git 管理をしていると、必ずといっていいほど悩まされるのが Finder が自動生成する .DS_Store ファイル。

.gitignore に書いたはずなのに、なぜか git status や GitHub の管理画面に毎回出てきてしまう…。
私自身も困って調べ回ったので、原因と対応方法を整理しました。
ぜひ最後まで読んでください。

なぜ .DS_Store が無視されないのか?

•   .gitignore は「まだ Git に追加していないファイル」を無視するだけです。
•   一度でも git add してしまった .DS_Store は、追跡対象になり続けるため、.gitignore に書いても無視されません。

-> 何の気なしに行ったcommitの中にもしも .DS_Storeが含まれていたら、永遠に出続けます。
(私はこれが原因でした。)

対処法:既存のリポジトリ

1. .gitignore に追記

リポジトリ直下の .gitignore に以下を追加します。(既に設定している場合はそのままです。)
.DS_Store を対象にした他のものが記述されている場合は、下記のみにしてください。

.DS_Store

-> 私の場合は、.DS_Store も2つ書いていたり、そりゃもうめちゃくちゃでしたので、一掃しました。

2. 追跡から外す

すでに追跡されてしまっている .DS_Store を外します。

find . -name .DS_Store -print0 | xargs -0 git rm --cached
git commit -m "Remove .DS_Store files from tracking"

これで以降は git status や gitの管理画面 から出なくなります。
-> 快適 🙌

3. 物理的に削除したい場合

ローカルからファイル自体も削除したいときは:

find . -name .DS_Store // 検索する
find . -name .DS_Store -delete // 削除する

これで、git の対象から.DS_Store 外れます。
-> さらに快適 🙌

今後のリポジトリでは自動で無視したい!

毎回 .gitignore に書くのは面倒なので、グローバル ignore 設定を入れるのがおすすめです。
-> 多くの方の記事を拝見しました。

1. グローバル .gitignore を作る
echo .DS_Store >> ~/.gitignore_global

2. Git に登録する
git config --global core.excludesfile ~/.gitignore_global

3. 設定確認
git config --global core.excludesfile

出力例:
/Users/example/.gitignore_global

自動無視の注意点

  • 新しいリポジトリには自動で反映されます。
  • 既存のリポジトリでは すでに追跡されている .DS_Store が残っている場合、上記 (対処法:既存のリポジトリ)の git rm –cached が必要です。
    -> なんだって!既存のリポジトリまだまだたくさんあるんだが。

まとめ

•   .gitignore に書いても無視されないのは「すでに追跡されているから」
•   git rm --cached → commit で追跡を解除すれば解決
•   今後のリポジトリには ~/.gitignore_global を設定しておくと楽

ここからは余談です。

そもそも 【.DS_Store】 とは?

•   正式名:Desktop Services Store
•   生成元:macOS の Finder
•   役割:フォルダを開いたときの表示設定やメタ情報を記録する

つまり「フォルダをどう見せるか」の情報を保存するための隠しファイルです。

-> 不要なようで必要なんですかね。

具体的に何を保存しているか?

•   アイコンの位置
•   ウィンドウのサイズや表示モード(リスト / アイコン / カラム / ギャラリー)
•   背景画像の設定
•   並び替え方法

たとえば、同じフォルダを開いたときに「自分の Mac ではアイコンが整列されているけど、別の人の Mac では違う並び」なんてことがありますよね。

これは .DS_Store が PC ごとに生成されるからです。

-> なるほど!!!

なぜ Git で問題になるの?

•   .DS_Store は プロジェクトに関係ないファイル
•   でも Finder を開くたびに勝手に生成される
•   その結果、git status に毎回「変更がある」と表示されて邪魔になる

特にチーム開発だと、他の人の環境の .DS_Store が混ざって「無駄な差分」が大量に発生する原因になります。
-> チーム開発は既に設定してもらっているものがほとんどだったんですよね😅

削除しても大丈夫?

はい、削除してもシステム的な問題は一切ありません。
消しても Finder が必要ならまた作ります。

つまり「無視する or 削除する」が正解です。
むしろリポジトリに含めてしまうとノイズになるので、開発者は必ず .gitignore で除外しています。
-> 😳、、、このページに来てしまった皆さん、これから頑張りましょう☺️

まとめ

•   .DS_Store = macOS Finder が作る「フォルダ表示設定ファイル」
•   プロジェクトには不要、削除して問題なし
•   Git ではノイズになるため 必ず無視するべきファイル

自分用の備忘録でもあります。
最後までありがとうございました。

興味を持ってくださった方はまずはココナラまたはお問い合わせからご遠慮なくご連絡ください。
連絡する

ココナラの登録がこれからの方はお得にサービスを楽しめます。

  • URLをコピーしました!

この記事を書いた人

10年ほどIT企業でエンジニアをしております、けんけんと申します。

法人の方や個人の方向けなど、幅広く対応させていただいております。年間100件ほどお取引をさせていただいております。
少しでもお客様のお役に立てるように、そして少しでも周りの人を笑顔にできるように心がけております。

コメント

コメントする

CAPTCHA


目次