guide
.git/info/exclude で自分だけの無視ルールを書く
.gitignore を変更せずに、1 つのリポジトリにだけ適用される個人の無視ルールを .git/info/exclude に書く方法、使いどころと優先順位を説明します。
.gitignore はコミットされ、全員と共有される。しかしこのリポジトリで自分だけ無視したいファイルがあることもある。個人のメモ、実験用のスクリプト、自分のエディタープラグインが作るフォルダーなどである。そうしたときに使う場所が .git/info/exclude である。
どこにあるか
git init や git clone を行うと、.git/info/exclude ファイルが既定で作成される。コメントが数行入っているだけの空のファイルである。
cat .git/info/exclude
# git ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# ...
.git ディレクトリの中にあるため、コミットされず、push しても他の人には渡らない。 構文は .gitignore とまったく同じである。複数のワークツリーを使う場合も含めて正確な場所を知りたければ、git rev-parse --git-path info/exclude で確認できる。
いつ使うか
| 状況 | 例 | おすすめの場所 |
|---|---|---|
| このリポジトリでだけ使う個人のファイル | notes.md, scratch/, todo.txt | .git/info/exclude |
| すべてのリポジトリに共通の個人のファイル | .DS_Store, *.swp | グローバル gitignore |
| すべてのチームメンバーに必要なルール | node_modules/, dist/, .env | .gitignore |
特に他人のリポジトリに貢献するときに便利である。自分のツールが原因で生まれるファイルを防ぐためにプロジェクトの .gitignore を変更すると、レビュアーがその変更を望まないことがある。.git/info/exclude に書けば、コミット履歴に手を触れずに済む。
echo 'scratch/' >> .git/info/exclude
echo '.my-plugin-cache/' >> .git/info/exclude
git status # もう表示されない
優先順位
ルールの出所のうち、.git/info/exclude は .gitignore より低く、グローバルファイルより高い。
- コマンドラインのパターン
.gitignore(下位ディレクトリのファイルが上位を上書き).git/info/excludecore.excludesFile
そのため、.gitignore が無視するファイルを .git/info/exclude の ! ルールで戻すことはできない。実際に確認すると次のようになる。
# .gitignore : x
# .git/info/exclude : !x
$ git check-ignore -v x
.gitignore:1:x x
注意点
- すでに追跡中のファイルには効果がない。.gitignore と同様、無視ルールは追跡されていないファイルにのみ適用される。
- 新しく clone するとこのファイルは既定の状態に戻る。複数のコンピューターで同じルールが必要なら、グローバル gitignore を使う方がよい。
- リポジトリを共有フォルダーにコピーして使う場合、
.gitディレクトリまでコピーされればルールも一緒に付いていく。
参考
- gitignore 公式ドキュメント: $GIT_DIR/info/exclude
- GitHub Docs: Excluding local files without creating a .gitignore file
- 確認基準日: 2026-09-23 (git 2.50.1 で優先順位の例を検証)