.gitignoreをホワイトリストとして設定する方法
.gitignoreファイルは、Gitリポジトリの重要な部分であり、不要なファイルがソース管理で追跡および共有されるのを防ぎます。通常、特定のファイルやフォルダーを無視したいですが、時にはその逆を行う方が簡単なこともあります。
.gitignoreをホワイトリストとして使用する
通常の .gitignore の使い方は簡単です---ファイル名や一致するワイルドカードを指定すれば、そのファイルはブロックされます。しかし、ホワイトリストとして使用すると、少し複雑になります。
まず、ファイルの先頭に次の2つのディレクティブが必要です。これにより、すべてのものがデフォルトでブロックされ、広範なワイルドカードが使用されます。
*:
*
!*/
2行目は、ホワイトリストの作成がブロックすることほど単純ではないため、必要です。Gitがこれらのファイルを扱う方法のため、ディレクトリがブロックされていると見なされた場合、Gitはそのディレクトリ内のものが後で解除されたかどうかを確認しようともせず、単にそれをスキップし、そのディレクトリ内のすべてのルールを無視します。
したがって、ここでの第二の行はGitにサブフォルダーを特にチェックするよう指示しています。感嘆符 ! はルールをホワイトリストに変えるために使用されます。それはすべてのディレクトリに一致しますが、それらのディレクトリの内部のものには一致しないため、これらの2行だけではGitはまだファイルを追跡しません。
これにより、次のようなセットアップが可能になります:
*
!*/
track this file
!.gitignore
whitelist everything in ./config/
!config/
.gitignoreファイル自体はメインディレクトリにあるので、通常通りホワイトリストに追加できます。ディレクトリをホワイトリストにするには単純にスラッシュを付けるだけで、Gitはそのディレクトリで通常の動作に戻り、以前の全ブロックのワイルドカードを上書きします。
特定のディレクトリとそのすべての内容を明示的にホワイトリストに登録したい場合は、ダブルワイルドカード!config/**を使用する必要があります。シングルワイルドカードは再帰的にサブディレクトリに伝播しません。これにより、他のすべてのブロックルールが上書きされます。
.gitignoreのデバッグ
構成に問題がある場合は、check-ignore Gitコマンドを使用してデバッグできます:
git check-ignore -v testfile.json