.gitignoreは、プロジェクトによってはリモートリポジトリで変更履歴をとっているので、個人的に省きたいファイルやフォルダを書き込むのが難しいという場面がありませんか?
特に昨今では自分用に最適化したAI関連の設定ファイル.claude/や、copilot-instructions.mdをプロジェクトのルートディレクトリに置きたい機会が増えているのではないでしょうか?
そういう時に便利な .gitignore_global と .git/info/excludeを紹介します。
変更履歴に残り続けていても気にならない人、またはプロジェクトによってリモートリポジトリの追跡対象に.gitignoreが入っていないプロジェクトでは今回の内容はあまり参考にならないかもしれません。
使用しているPC上で、常に追跡を逃れたい…そんな時は~/.gitignore_global
新しいPCを使い出した時はこの~/.gitignore_globalに書いておけば、そのPC内ではいちいちプロジェクトファイルを作ったときに.gitignoreを書かなくて済むようになります。
macだと.DS_Storeや、AIエージェント関係のものは常にGitの追跡を逃れさせたいのではないでしょうか?そんな時には私は以下のように書いています。
.DS_Store
copilot-instructions.md
CLAUDE.md
claude-log/
.claude/
.vscode/
.serena/
プロジェクト単位で.gitignoreを使わず追跡を逃れる定義をしたい…そんな時は.git/info/exclude
プロジェクト単位で追跡対象外にしたいディレクトリやファイルを指定する場合、有名なのは.gitignoreに定義する方法ですが、プロジェクトによっては.gitignoreがリモートリポジトリの追跡対象で、個人で.gitignoreを変更すると、変更履歴に載ってしまって邪魔になる…ということありますよね。
そんな時はプロジェクトファイルの.git/info/excludeに書き込んで定義しましょう。
このファイルは.git以下にあり、もともとGit追跡対象外なので、変更しても変更履歴に載りません。
.DS_Store
copilot-instructions.md
CLAUDE.md
claude-log/
.claude/
.vscode/
.serena/
(おまけ)最初からリポジトリに存在していたファイルを除外したい時
最初からリモートリポジトリにあったファイルを変更履歴から除外したいときには、上記の方法だけでは除外対象にできません。
- ~/.gitignore_global
- .git/info/exclude
- .gitignore
上記はまだgitに追加されていないファイルだけに効く性質があるからです。
assume-unchangedで自分のローカルだけで変更を無視させる
対象リポジトリの中の.gitがあるディレクトリで以下を実行します。
git update-index --assume-unchanged 対象ファイル名
これで、git statusに出ないし、git diffに出ないからpushされないようになります。
元に戻すには
assume-unchangedをすると、他人が対象ファイルを変更してpushした場合Git は Makefile の更新チェックを省略する可能性が出てきます。
そうなると、git pullしても対象ファイルが更新されない、エラーも警告も出ないことがあります。
ただ、以下の場合はちゃんとconflictが出ます。
- upstreamの対象ファイルが大きく変わった
- merge時に競合が発生するレベルの変更だった
しかしながら完全ではないので、いつもはassume-unchangedをしていて、変更があったとチーム共有があったら、以下のコマンドで元に戻すことをお勧めします。
git update-index --no-assume-unchanged Makefile