グローバル gitignore の設定 (core.excludesFile)
macOS の .DS_Store やエディターのファイルのように個人の環境で生まれるファイルを、すべてのリポジトリで無視するよう core.excludesFile を設定する方法と既定のパスを説明します。
.DS_Store、Thumbs.db、.idea/workspace.xml、*.swp のようなファイルは、プロジェクトではなく自分のコンピューターと自分のエディターが原因で生まれる。こうしたルールをリポジトリごとに繰り返し入れる代わりに、一度だけ書いておく場所がグローバル gitignore である。
既定のパス
特に設定しなくても、git は次のファイルをグローバルな無視リストとして読む。
$XDG_CONFIG_HOME/git/ignoreXDG_CONFIG_HOMEが空または未設定なら$HOME/.config/git/ignore
つまり、ほとんどの macOS・Linux 環境では ~/.config/git/ignore ファイルを作るだけでよい。
mkdir -p ~/.config/git
printf '.DS_Store\n*.swp\n.idea/workspace.xml\n' >> ~/.config/git/ignore
別のファイルを使いたいなら core.excludesFile
任意のパスのファイルを使うには core.excludesFile を設定する。この値を設定すると、既定のパスの代わりにそのファイルを読む。
# macOS / Linux
git config --global core.excludesFile ~/.gitignore_global
# Windows (PowerShell)
git config --global core.excludesFile "$env:USERPROFILE\.gitignore_global"
設定が入ったかどうかは次のコマンドで確認する。
git config --global --get core.excludesFile
値が出力されなければ未設定であり、その場合は上記の既定のパスが使われる。
何をグローバルに置くか
グローバルに向いているのは、どのプロジェクトで作業しても同じように生まれる個人のファイルである。
| 種類 | 例 | おすすめのテンプレート |
|---|---|---|
| OS | .DS_Store, ._*, Thumbs.db, desktop.ini, *~ | macOS, Windows, Linux |
| エディター・IDE の個人状態 | *.swp, .idea/workspace.xml, .vscode/* の個人ファイル | Vim, JetBrains, VisualStudioCode |
| 個人のツール | .envrc(direnv)、個人メモのフォルダー | 自分で書く |
ジェネレーターで macOS・JetBrains のようなテンプレートだけを選んで結果をコピーすれば、そのままグローバルファイルの内容として使える。
逆に、ビルド結果、依存関係フォルダー、秘密のファイルはグローバルではなくプロジェクトの .gitignore に置く。こうしたルールはリポジトリを取得するすべての人に適用される必要があるためである。
グローバルに置く方式の限界
グローバル gitignore は自分のコンピューターにだけ適用される。チームメンバーがグローバル設定をしていなければ、その人の .DS_Store は依然としてコミットされうる。そのため GitHub のテンプレートリポジトリも、Global テンプレートをグローバルに置く方法と、プロジェクトのテンプレートに結合する方法の両方を案内している。
実務では次の基準が無難である。
- 個人プロジェクト、またはチームのルールとしてグローバル設定を案内できるなら、グローバルに置く。
- オープンソースのように貢献者を統制できないなら、
.DS_Store、Thumbs.dbくらいはプロジェクトの .gitignore にも入れる。
優先順位
グローバルファイルは 4 つのルールの出所のうち最も低い優先順位を持つ。グローバルで *.log を無視していても、プロジェクトの .gitignore に !keep.log があればプロジェクト側が勝つ。どのルールが適用されたかわからなくなったら、git check-ignore -v <パス> を実行すればよい。出力の先頭にグローバルファイルのパスが出れば、グローバルのルールが決定したということである。