はじめに
Gitで作業していると、.gitignore
でファイルが除外されているか確認したい場面がある。
特に複雑なignoreパターンを使っている場合、なぜ特定のファイルが追跡されないのか分からないことがある。
なので、git check-ignore
を使ってignore
ルールによって除外されているかを確認してみる。
環境
git 2.34.1
使い方
オプション一覧
オプション | 説明 |
---|---|
-q, --quiet | 何も出力せず、終了ステータスのみを設定 |
-v, --verbose | 除外パターンとともにパスを出力 |
--stdin | 標準入力から1行ずつパス名を読み込み |
-z | 出力を機械可読形式に変更、NUL文字で区切り |
-n, --non-matching | どのパターンにも一致しないパスも表示 |
--no-index | インデックスを参照せずにチェック |
ファイルの除外状態を確認
git check-ignore ファイル名
除外されているファイルはパスが出力され、除外されていないファイルは何も出力されない。
# .gitignoreで除外されているファイル
git check-ignore node_modules/package.json
# 出力: node_modules/package.json
# 除外されていないファイル
git check-ignore src/main.js
# 出力なし
詳細情報の表示
-v
オプションで、どのignoreルールが適用されているかを確認できる。
git check-ignore -v ファイル名
git check-ignore -v node_modules/package.json
# 出力: .gitignore:1:node_modules/ node_modules/package.json
出力形式:ソースファイル:行番号:パターン [TAB] ファイルパス
使用例
複数ファイルの一括確認
# 複数ファイルを同時にチェック
git check-ignore file1.txt file2.log build/output.js
# ワイルドカードを使用
git check-ignore *.log
非マッチファイルも表示
-n
オプションで、除外されていないファイルも表示できる。
git check-ignore -v -n src/main.js build/output.js
:: src/main.js
.gitignore:3:build/ build/output.js
標準入力からの読み込み
# ファイルリストから確認
find . -name "*.log" | git check-ignore --stdin
インデックスを無視した確認
--no-index
オプションで、既に追跡されているファイルもチェック対象にできる。
git check-ignore --no-index -v 追跡中のファイル
使用場面例
.gitignoreのデバッグ
意図しないファイルが除外されている場合の原因調査
# なぜこのファイルが追跡されないのか?
git check-ignore -v important-file.txt
# 出力: .gitignore:5:*.txt important-file.txt
追加できないファイルの調査
git add
で追加できないファイルの確認
git check-ignore -v new-file.js
# 除外されている場合は強制追加
git add -f new-file.js
ビルド成果物の確認
ビルドディレクトリが正しく除外されているかの確認
git check-ignore dist/bundle.js build/output.css
参考
git-check-ignore Documentation
https://git-scm.com/docs/git-check-ignore/jagitignore Documentation
https://git-scm.com/docs/gitignore/ja
おわりに
実際に.gitignore
に多くの行がある場合や、分散している場合はどのパターンが適用されているかわからないときが多くあったので助かった。-v
オプションと組み合わせることで、どのルールが適用されているかが一目で分かるので非常に便利。
git
のサブコマンドはかなり有用なものが多いので一つずつ覚えておきたい。