guide

.git/info/exclude で自分だけの無視ルールを書く

.gitignore を変更せずに、1 つのリポジトリにだけ適用される個人の無視ルールを .git/info/exclude に書く方法、使いどころと優先順位を説明します。

.gitignore はコミットされ、全員と共有される。しかしこのリポジトリで自分だけ無視したいファイルがあることもある。個人のメモ、実験用のスクリプト、自分のエディタープラグインが作るフォルダーなどである。そうしたときに使う場所が .git/info/exclude である。

どこにあるか

git initgit 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 より低く、グローバルファイルより高い

  1. コマンドラインのパターン
  2. .gitignore (下位ディレクトリのファイルが上位を上書き)
  3. .git/info/exclude
  4. core.excludesFile

そのため、.gitignore が無視するファイルを .git/info/exclude! ルールで戻すことはできない。実際に確認すると次のようになる。

# .gitignore        : x
# .git/info/exclude : !x
$ git check-ignore -v x
.gitignore:1:x	x

注意点

参考

← 前へグローバル gitignore の設定 (core.excludesFile)