フォルダーを無視するには?folder/ と /folder/ の違い

ルートの .gitignore では /logs/ は隣の logs だけを対象にし、logs/ はその下の各階層にある同名ディレクトリを対象にします。まず必要な範囲を決めましょう。

1. プロジェクトのルートだけを除外する

ルートの .gitignore に次のルールを置きます。logs/app.log とルートの logs 以下を除外しますが、packages/api/logs/app.log は追跡の対象にできます。先頭の / の基準は、この .gitignore があるディレクトリです。

/logs/

2. 各階層の同名ディレクトリを除外する

logs という名前のディレクトリをすべて除外するには、こちらに置き換えます。末尾の / はディレクトリだけを指定します。logs だけなら同名のファイルにも一致します。

下位の .gitignore は自身の場所を基準にします。そこでの /logs/ はリポジトリのルートではなく、そのファイルの隣の logs です。packages/api/logs/ のように途中にスラッシュがあるパターンも .gitignore の場所を基準にします。

logs/

拡張子でファイルを無視するには?* と ** の使い方

3. 適用範囲を確認する

例の2つの未追跡ファイルを作成し、リポジトリのルートで定義元と一致ルールを確認します。

git check-ignore -v -- logs/app.log packages/api/logs/app.log

/logs/ ならルートのパスだけ、logs/ なら両方に一致するはずです。他のルールが結果を変える場合もあります。追跡済みファイルは別途対処してください。無視されたディレクトリの中に例外を残す場合は、例外ルールの記事を参照してください。

Git がすでに追跡しているファイルを無視するには?

正確な動作や詳細は、公式の資料を参照してください。 Git のドキュメント · git check-ignore の公式ドキュメント