Git を使っていると、「特定の拡張子だけをまとめてステージングしたい」という場面があります。特に、プロジェクトのディレクトリが深く入り組んでいる場合や、特定の種類のファイル(例:.php、.js、.css など)だけをまとめてコミットしたい時に便利です。
しかし、そのまま git add *.php と入力しても、意図した結果にならないことがあります。この記事では、Git の pathspec(パターン指定) を使って、深い階層を含むファイルを正しくステージングする方法をわかりやすく解説します。
なぜ git add *.php では深い階層が追加されないのか
ターミナルで git add *.php と入力すると、まずシェル(bash など)がパターンを展開します。これにより、現在のディレクトリ直下の .php ファイルだけが対象になります。
深い階層(例:src/sub/module/file.php)はシェルのパターン展開の対象外となるため、自動的には追加されません。
深い階層のファイルもまとめてステージする方法
ポイントは、シェルではなく Git にパターンを解釈させることです。そのためには、拡張子パターンを クォート(引用符) で囲みます。
リポジトリ内のすべての .php を追加する
git add '*.php'
これで、深い階層にある .php もまとめてステージングできます。
特定ディレクトリだけ絞って追加する
特定のディレクトリ(例:src/ 配下)の拡張子だけを追加したい場合は、以下のように指定できます。
git add 'src/**/*.php'
** は再帰的なディレクトリを意味し、src 以下すべての .php ファイルが対象になります。
複数の拡張子をまとめて追加する
.php と .js といった複数の拡張子を同時に指定することも可能です。
git add '*.php' '*.js'
Git の pathspec マジックを使う方法(応用)
より明示的にパターンを指定したい場合は、Git の :(glob) というマジックを使用できます。
git add ':(glob)**/*.php'
これは「globパターンで 全階層 の .php を追加する」という意味になります。通常はここまで使わなくても問題ありませんが、より高度な指定が必要な場合に便利です。
まとめ
深い階層の拡張子指定でステージングする際のポイントは以下の通りです。
git add '*.php'のように クォートで囲むことで、Git にパターンを処理させられる- これにより、深い階層のファイルもまとめてステージング可能となる
- ディレクトリ指定や複数拡張子の指定も柔軟に行える
- 必要に応じて
:(glob)を使うとさらに細かい制御が可能
Git で効率良くステージングするためにも、pathspec の活用は覚えておくと非常に便利です。大規模プロジェクトや階層が深いディレクトリ構造では特に役立つため、ぜひ活用してみてください。


コメント