トラブルシューティング
.gitignore が効かないときの対処法
.gitignore に追加したのに無視されないファイルへの対処方法を解説
なぜ .gitignore が効かないのか
.gitignore は「まだ Git に追跡されていないファイル」にだけ効果があります。
一度 git add してステージングエリアに登録したファイルや、既にコミット済みのファイルは .gitignore に記述しても無視されません。
これが最も多い原因です。
git rm --cached で追跡を解除する
git rm --cached <file>で追跡を解除ワーキングツリーのファイルは残したまま、Git の追跡だけを外します。
ディレクトリは
-rを付けるgit rm --cached -r logs/のように-rを指定するとディレクトリ配下をまとめて解除できます。変更をコミット
git commit -m "追跡対象から除外"で確定させます。以降は.gitignoreが効くようになります。
bash
# ファイル単体の追跡を解除
git rm --cached secret.txt
# ディレクトリごと追跡を解除
git rm --cached -r logs/
# 変更をコミット
git commit -m "追跡対象から除外".gitignore のパターン記法
.gitignore では、*(任意の文字列)、**(ディレクトリの再帰マッチ)、!(否定パターン) などが使えます。
ディレクトリを指定する場合は末尾に / を付けます。
で始まる行はコメントです。
bash
# よく使うパターン例
*.log # すべての .log ファイル
build/ # build ディレクトリ
!important.log # important.log は除外しない
**/.DS_Store # すべての階層の .DS_Storeプロジェクト全体の追跡解除を一括で行う
全ファイルのキャッシュをクリア
git rm -r --cached .を実行します。ワーキングツリーのファイルには影響しません。再度
git add .で追加今度は
.gitignoreが反映された状態で再追跡されます。コミット
git commit -m ".gitignore を再適用"のようにコミットして完了です。
bash
# 全ファイルのキャッシュをクリア
git rm -r --cached .
# 再度追加(.gitignore が反映される)
git add .
# コミット
git commit -m ".gitignore を再適用"
Git Ready