.git/info/exclude でチームリポジトリを汚さずにローカル専用ファイルを管理する
開発をしていると、「これはチームで共有したくないが、自分用としてはちゃんと管理したいファイル」を置きたくなる場面がある。
例えば、
- 実験用のコード
- 一時的な SQL
- API レスポンスのダンプ
- 設計途中のメモ
- 試行錯誤中のスクリプト
といったものだ。
単純に .gitignore に書いてしまう方法もあるが、それを書くこと自体がチームリポジトリを汚している感覚があり、個人的にはずっと違和感があった。
よくあるが微妙な方法
よく見かけるのは次のような構成だ。
project/
├─ src/
├─ docs/
└─ tmp/ ← 自分用
そして .gitignore に
/tmp/
と書く。
一見問題なさそうだが、冷静に考えると気持ちが悪い。
- チーム全員に関係ないディレクトリの存在が
.gitignoreに残る - 「これは何のため?」というノイズが増える
- 本来ローカルだけの事情なのに、履歴として永続化される
小さなことだが、積み重なると地味にストレスになる。
親リポジトリを一切汚さない方法
結論から言うと、.git/info/exclude を使うのが一番きれい。
これは Git に最初から用意されている仕組みで、
.gitignoreと同じ書き方ができる- ローカル環境にしか反映されない
- commit されない
- 他のメンバーには一切影響しない
という特徴がある。
要するに、ローカル専用の .gitignore だ。
実際の使い方
まず、プロジェクト直下に自分専用の置き場を作る。
mkdir _private
次に、親リポジトリの以下のファイルを編集する。
.git/info/exclude
ここにだけ、次を追加する。
/_private/
これで終わりだ。
- 親の
.gitignoreは一切変更しない _privateは Git から完全に無視される- 他のメンバーの環境には存在しない
かなりすっきりする。
さらに一歩進める:自分専用でも Git 管理する
単に無視するだけでなく、自分用としては履歴管理したい場合もある。
その場合は、 _private の中で別リポジトリを作る。
cd _private
git init
こうすると、
- 親プロジェクトとは完全に独立
- 自分のメモや実験コードを自由に commit できる
- diff / reset / 履歴管理も可能
- チームリポジトリには一切影響しない
という状態になる。
最終的な構成イメージ
project-root/
├─ app/
├─ api/
├─ docs/
├─ _private/ ← 自分専用(ローカル ignore)
│ ├─ experiments/
│ ├─ memo.md
│ └─ .git/ ← 自分用リポジトリ
└─ .git/
この構成にしてから、
- 「とりあえず置く場所」に悩まなくなった
- 実験や検証の心理的ハードルが下がった
- チームに対して余計な気遣いをしなくて済む
という効果を感じている。
まとめ
- チームに共有しないファイルは
.gitignoreに書かなくていい - ローカル限定の ignore には
.git/info/excludeを使う - 管理したければディレクトリ単位で別 Git リポジトリを切る
小さな工夫だが、分かっているとかなり気持ちよくなる Git 運用だと思う。