Table of Contents
はじめに
.gitignoreにフォルダを追加したのに、なぜかそのフォルダ配下のファイルが Git の管理対象から外れてくれない、という経験は多くの方が一度は通るポイントだと思います。
これはGitの仕組みを知っていれば理由がはっきりしており、正しい手順を踏めば安全に対象外にできます。
この記事では、「gitignoreに特定のフォルダを追加しても既存のフォルダが対象外にならない」状況の原因と、具体的な解決方法をシンプルな手順でまとめます。
解決策
なぜ.gitignoreを追加しても無視されないのか
まず押さえておきたいのは.gitignoreの役割です。
.gitignoreは「これから Git に追加されるファイル・フォルダ」を無視するための設定ファイルです。- 既に
git add済みでGitによって追跡されているファイル・フォルダは、.gitignoreを更新しても自動では対象外になりません。
つまり、「もう既にコミットしているフォルダ」を無視したい場合は、.gitignoreに書くだけでは不十分で、「一度 Git の管理対象から外す」操作が別途必要になります。
手順の全体像
ここでは例として、logs/フォルダを今後は Git 管理から除外したいケースを想定します。
やることは次の 3 ステップです。
.gitignoreに対象フォルダを追記する- 既に追跡されているフォルダをインデックス(ステージ)から外す
- 変更をコミットする
順番に見ていきます。
1. .gitignore に対象フォルダを追記する
リポジトリのルートにある .gitignoreを開き、次のように記述します。
logs/ポイントは、フォルダを指定するときは末尾に /を付けることです。
これにより、logs/配下のファイル・サブフォルダすべてが無視対象となります。
2. 既存フォルダをインデックスから外す
次に、すでに Git が追跡している logs/フォルダを、Git の管理対象(インデックス)から外します。
git rm -r --cached logs/ここで重要なのは --cachedオプションです。
--cachedを付ける: Git の管理対象からは外すが、ローカルのファイルは削除されない--cachedを付けない: 実ファイル自体も削除されてしまう
誤って --cachedを付け忘れると実体のファイルが消えてしまうため、必ず --cachedを付けて実行してください。
3. 変更をコミットする
最後に、この状態をコミットします。
git commit -m "Ignore logs directory"このコミットには、次の 2 つの変更が含まれます。
.gitignoreにlogs/を追加した変更- それまで追跡していた
logs/配下のファイルを管理対象から外した変更
このコミット以降、logs/以下に新しく作成されたファイルは、git statusや git diffなどで表示されなくなります。
また、うっかり git add .を実行しても .gitignoreの設定によって無視されるようになります。
うまくいかないときに確認するポイント
もし上記の手順を行っても期待どおりに無視されない場合は、次の点を確認してみてください。
.gitignoreの書き方が正しいか- フォルダなら
logs/のように末尾に/を付ける - ファイル名やパターンのスペルミスがないか
- フォルダなら
.gitignoreの位置が適切か- リポジトリルートの
.gitignoreで全体を管理するのか - サブディレクトリ内の
.gitignoreに書いている場合、そのディレクトリ以下にしか効かない点に注意
- リポジトリルートの
- 他のルールと競合していないか
- 否定パターン(
!から始まるルール)で再度追跡対象にしていないか
- 否定パターン(
この手順を覚えておくと、ログファイルやアップロードファイル、ビルド成果物など、「一度コミットしてしまったけれど、やっぱりバージョン管理の対象から外したい」ケースにすぐ対応できるようになります。