git check-ignoreでignoreされているファイルを確認する

はじめに

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

参考

おわりに

実際に.gitignoreに多くの行がある場合や、分散している場合はどのパターンが適用されているかわからないときが多くあったので助かった。
-vオプションと組み合わせることで、どのルールが適用されているかが一目で分かるので非常に便利。

gitのサブコマンドはかなり有用なものが多いので一つずつ覚えておきたい。

Hugo で構築されています。
テーマ StackJimmy によって設計されています。