てもとツール

.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/ のように、フォルダの指定ひとつで結果が変わる行の取り違えに気づけます

使い方

  1. .gitignore の中身を上の欄に貼り付けます
  2. 確かめたいパスを 1 行に 1 つ入れます(フォルダは末尾に / を付けます)
  3. サブフォルダに置いた .gitignore なら、置いたフォルダの名前を入れます
  4. パスごとの判定と決め手の行を読みます
  5. 下の「行の指摘」で、意図と違う読まれ方をしている行が無いかを見ます

使用例

親フォルダを無視すると ! で戻せない

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 で確かめ、ツールの切り替えを合わせます。

参考・出典

本ツールの計算式・判定基準は上記の公的機関・公式情報源を参考にしています。最新の情報は各リンク先をご確認ください。

関連記事

このツールの使い方や活用例をブログでも紹介しています。

関連ツール

同じカテゴリの他のツールも合わせてどうぞ。