背景
Gitでは、各ディレクトリに .gitignore を置くことで、管理対象にしないファイルを指定できます。
しかし、自分の環境だけで無視したいファイルが出てくることもあるでしょう。Gitにはいくつか方法があります。
要約
- グローバルであれば
$HOME/.config/git/ignoreが便利です- ただし、Git の設定の
core.excludesFileが優先されるので注意です
- ただし、Git の設定の
- 各リポジトリごとに設定したい場合は
.git/info/excludeが良いでしょう
参考
細かい設定
- ローカル(各 Git リポジトリ):
-
.git/info/exclude($GIT_DIR/info/excludeと表現されている) -
git config --add core.excludesFile "path/to/file"で任意のパスを指定(グローバルより優先される)
-
- グローバル(全ての Git リポジトリ):
-
$HOME/.config/git/ignore- ※厳密には
$XDG_CONFIG_HOME/git/ignoreだが、XDG_CONFIG_HOME未設定時は$HOMEとなる
- ※厳密には
-
git config --global --add core.excludesFile "path/to/file"で任意のパスを指定
-
注意点
注意点として、複数設定した場合は以下の優先順位で適用されます。(同列では最も優先度が高いもののみが適用されます)
- local の
core.excludesFile> global のcore.excludesFile>$HOME/.config/git/ignore .git/info/exclude
.git/info/exclude は少し特別扱いされています。
$HOME/.config/git/ignore が効かない場合は、git config core.excludesFile で設定されていないかを確認してください。
動作テスト
global 設定の操作が含まれるため、実施する際は注意してください。
# 一応、
mkdir -p "$HOME/.config/git"
# 各.gitignoreファイルを用意
echo "test-global1.txt" > "$HOME/.mygitignore1"
echo "test-local1.txt" > "$HOME/.mygitignore2"
# 1. グローバル & 特定ファイルパス指定
# ※ $HOME/.config/git/ignore に追記操作があるので後始末に注意!
echo "test-global2.txt" >> "$HOME/.config/git/ignore"
# 2. グローバル & excludesFile指定
# ※ core.excludesFile が上書きされるので後始末に注意!
BACKUP_GIT_GLOBAL_EXCLUDES_FILE=$(git config --global core.excludesFile)
git config --global --add core.excludesFile "$HOME/.mygitignore1"
# テスト用 Git リポジトリ用意
mkdir test && cd test
git init
# 3. ローカル & 特定ファイルパス指定
echo "test-local2.txt" > ".git/info/exclude"
# 4. ローカル & excludesFile指定
git config --add core.excludesFile "$HOME/.mygitignore2"
# テスト用ファイル作成
echo > test-global1.txt
echo > test-global2.txt
echo > test-local1.txt
echo > test-local2.txt
echo > hello.txt
# 確認(3,4 が適用され、test-local1.txt, test-local2.txt だけ除外)
git status
# 4 の設定を解除
git config --unset core.excludesFile
# 確認(2,3 が適用され、test-global1.txt, test-local2.txt だけ除外)
git status
# 3 の設定を解除
rm ".git/info/exclude"
# 確認(2 が適用され、test-global1.txt だけ除外)
git status
# 2 の設定を削除
# ※ core.excludesFile を設定している場合は後で設定し直すこと
git config --global --unset core.excludesFile
# バックアップしている場合は以下で戻す
# git config --global --add core.excludesFile "$BACKUP_GIT_GLOBAL_EXCLUDES_FILE"
# 確認(1 が適用され、test-global2.txt だけ除外)
git status
コード確認
コード上はこのあたりでやっていそう。