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

*.log は .gitignore の適用範囲の各階層にある .log ファイルに一致します。特定のディレクトリに限定する場合は、下位階層も含めるかを決めます。

1. プロジェクト全体で拡張子を除外する

ルートの .gitignore にこのルールを置くと、app.log、logs/app.log、src/app.log に一致します。* は / 以外の0文字以上に一致します。パターンにスラッシュがなければ、この .gitignore より下の各階層で名前を照合します。

ルールは1行ずつ書きます。Git の除外パターンはシェルコマンドや正規表現ではありません。*.{log,tmp} の波括弧は拡張子の一覧を表しません。

*.log

2. ディレクトリを限定する

次の最初の案は logs 直下の logs/app.log に一致し、logs/archive/app.log には一致しません。2つ目は両方に一致します。/**/ は途中のディレクトリが0階層でも複数階層でも一致します。どちらも src/app.log には一致しません。

比較するときは1つの案だけを適用します。/logs/ のようなルールでも親ディレクトリを除外して下位ファイルを隠すため、ワイルドカードを判断する前に他のルールも確認してください。

/logs/*.log
/logs/**/*.log

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

3. 代表的なパスを検証する

ルールを選び、例の3つの未追跡ファイルを作成してから、一致パターンを調べます。

git check-ignore -v -- logs/app.log logs/archive/app.log src/app.log

/logs/**/*.log では logs 以下の2つが一致し、src/app.log は一致しないはずです。詳細出力で ! から始まるものは例外です。1ファイルを残すには明示的な例外を書き、すべての親ディレクトリを探索可能にしてください。

! を使っても無視されたディレクトリ内のファイルを残せないのはなぜ?

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