.gitignoreテスター|ファイルが無視されるかと決め手の行をその場で確かめる
貼り付けた .gitignore と確かめたいパスを照らし、git で無視されるかを判定します。決め手の行番号、親フォルダのせいで ! が効かない行、書き間違いやすい行まで表示します。
リポジトリの一番上からのパスで書きます。フォルダは末尾に / を付けて書きます(build/)。付けないとファイルとして判定します。
サブフォルダに置いた .gitignore は、そのフォルダより下にだけ効きます(例: packages/app)。
Mac や Windows で作ったリポジトリは、こちらが既定のことがあります。git config core.ignorecase で確かめられます。
.gitignore を貼り付けてください
確かめたいパスを入れると、無視されるかどうかと決め手の行を出します。
このツールについて
使い方・特徴・補足情報
.gitignoreテスターとは
.gitignoreテスターは、.gitignore に書いた行でファイルが無視されるかを確かめるツールです。 .gitignore の中身と、確かめたいパスを貼り付けるだけで判定します。
パスごとに、決め手になった行の番号と中身を出します。 親フォルダが無視されているせいで ! の行が効かないときは、その行も名指しします。
行頭の空白や行末のタブなど、見た目では気づきにくい書き方も指摘します。 判定の手順は git 本体のソースを写し、git 2.43.0 の判定と突き合わせて確かめています。
こんな人におすすめ
Git でコードや原稿を管理する人
楽になること
.gitignore の効き方の確認作業
避けたい手間
除外のつもりの行が効いていないこと
解決できる困りごと
- ! で戻したはずのファイルが無視されたままになる理由を、親フォルダの行まで追って探す手間が減ります
- どの行が効いているかを確かめるために、ファイルを作っては git status を打ち直す試行錯誤が要らなくなります
- 行頭の空白や行末のタブのせいで効いていない行に、気づかないままコミットするのを防げます
- サブフォルダに置いた .gitignore がどこまで効くかを、頭の中で数えずに確かめられます
- build と build/ のように、フォルダの指定ひとつで結果が変わる行の取り違えに気づけます
使い方
- .gitignore の中身を上の欄に貼り付けます
- 確かめたいパスを 1 行に 1 つ入れます(フォルダは末尾に / を付けます)
- サブフォルダに置いた .gitignore なら、置いたフォルダの名前を入れます
- パスごとの判定と決め手の行を読みます
- 下の「行の指摘」で、意図と違う読まれ方をしている行が無いかを見ます
使用例
親フォルダを無視すると ! で戻せない
logs/ がフォルダごと無視しているので、2 行目の ! は効きません。決め手は 1 行目になります。
入力
logs/
!logs/keep.log
パス: logs/keep.log
出力
[無視される] logs/keep.log
決め手: 1 行目「logs/」
2 行目「!logs/keep.log」はこのパスに一致しますが、親フォルダ logs/ が無視されているので効きません
中身だけを無視すれば ! で戻せる
logs/* はフォルダの中身を無視するだけなので、フォルダ自体は残ります。! で 1 つだけ戻せます。
入力
logs/*
!logs/keep.log
パス: logs/keep.log / logs/old.log
出力
[無視されない] logs/keep.log
決め手: 2 行目「!logs/keep.log」
[無視される] logs/old.log
決め手: 1 行目「logs/*」
サブフォルダに置いた .gitignore
置き場所を frontend にすると、/dist は frontend/dist を指します。backend のパスには効きません。
入力
/dist
*.log
置き場所: frontend
パス: frontend/dist/app.js / backend/debug.log
出力
[無視される] frontend/dist/app.js
決め手: 1 行目「/dist」
[この .gitignore の外] backend/debug.log
行末のタブで効かなくなった行
行末のタブは削られないので、node_modules/ のつもりの行がフォルダに当たりません。行の指摘に出ます。
入力
node_modules/(行末にタブ)
パス: node_modules/
出力
[無視されない] node_modules/
どの行にも一致しません。
1 行目: 行末のタブは削られず、名前の一部として照合されます
活用シーン
コミット前に .gitignore を書き足す
書き足した行と、コミットしたくないファイルの一覧を貼ります。狙いどおり無視されるかを、コミットの前に確かめます。
! の行が効かない原因を探す
効いていない ! の行と、そのファイルのパスを入れます。親フォルダを無視している行の番号が出るので、直す行が分かります。
モノレポのサブフォルダの設定を読む
packages/app に置いた .gitignore を貼り、置き場所に packages/app を入れます。外のパスは「外」と出ます。
引き継いだリポジトリの設定を読む
前任者が書いた長い .gitignore でも、行ごとに何件のパスを決めたかと、読まれ方の怪しい行がまとめて分かります。
Windows と Mac で結果が違う理由を探す
大文字小文字を区別しない設定に切り替えて、Readme.md と README.md の判定が変わるかを比べます。
技術的な解説
補足: 仕組み
照合は git の wildmatch.c と dir.c の手順を写しています。 / を含まない行は名前だけと、含む行は置き場所からのパス全体と比べます。
まず親フォルダを上から順に見ます。 どこかのフォルダが無視されていれば、中身は ! の行があっても無視です。
そうでなければ、下の行から見て最初に一致した行が決めます。 文字の比較は UTF-8 のバイト単位なので、? は日本語 1 文字ではなく 1 バイトに当たります。
もっと詳しく
! の行が効かないのは親フォルダを無視したとき
git は、無視したフォルダの中を見に行きません。 そのため logs/ と書いたあとに !logs/keep.log を足しても、keep.log は無視されたままです。
戻したいなら logs/* と中身だけを無視します。 深い階層なら、途中のフォルダも ! で戻す行が要ります。
フォルダかどうかは末尾の / で伝える
git は、フォルダかどうかを実際のファイルから読みます。 このツールには実物が無いので、パスの末尾の / で見分けます。
build/ と書いた行は、フォルダの build にだけ当たります。 パスを build と書くとファイル扱いになり、結果が変わります。
git 本体と突き合わせて確かめた範囲
期待値は、git 2.43.0 の git check-ignore に答えさせて作りました。 72 通りの .gitignore と 525 件のパスで、判定と決め手の行が一致しています。
照らすのは貼り付けた 1 つの .gitignore だけです。 すでにコミットしたファイルは、ここで無視されると出ても git が変更を追い続けます。
よくある質問
.gitignore に書いたのに変更が出続けるのはなぜですか
そのファイルをすでにコミットしているからです。.gitignore は追跡前のファイルにだけ効くので、git rm --cached で追跡を外すと以後は無視されます。
! を付けた行が効かないのはなぜですか
親フォルダが別の行で無視されていると、中のファイルは ! で戻せません。フォルダごとではなく、中身を無視する書き方(logs/*)に変えます。
フォルダを確かめるときはどう書けばよいですか
パスの末尾に / を付けます(build/)。付けないとファイルとして判定するので、build/ の行には当たりません。
Windows や Mac で結果が変わることはありますか
大文字小文字を区別しない設定(core.ignorecase)が既定で有効なことがあります。git config core.ignorecase で確かめ、ツールの切り替えを合わせます。
参考・出典
本ツールの計算式・判定基準は上記の公的機関・公式情報源を参考にしています。最新の情報は各リンク先をご確認ください。
関連記事
このツールの使い方や活用例をブログでも紹介しています。
関連ツール
同じカテゴリの他のツールも合わせてどうぞ。