Git の無視
Git は作業コピーのあらゆるファイルを次の3つのうちの1つとみなします。
1. 追跡済み - 以前にステージまたはコミットされたファイル。
2. 未追跡 - ステージまたはコミットされていないファイル。
3. 無視 - Git が明示的に無視するように指示されたファイル。
無視されるファイルは通常、リポジトリーソースから派生するか、またはコミットされないようにするビルド成果物およびマシン生成ファイルです。一般的な使用例の一部を次に挙げます。
/node_modules
または/packages
のコンテンツなどの、依存関係のキャッシュ- コンパイルされたコード (
.o
、.pyc
、および.class
ファイルなど) - ビルド出力ディレクトリ (
/bin
、/out
、または/target
など) - 実行時に生成されるファイル (
.log
、.lock
、または.tmp
など) - 非表示のシステムファイル (
.DS_Store
またはThumbs.db
など) .idea/workspace.xml
などの個人用 IDE 設定ファイル
無視されたファイルは、.gitignore
という名前の特別なファイルで追跡されます。これはリポジトリのルートでチェックインされます。明示的な git ignore コマンドはありません。無視したい新規ファイルがある場合には、代わりに .gitignore
ファイルを手動で編集してコミットする必要があります。.gitignore
ファイルには、ファイルを無視すべきかどうかを決定するためにリポジトリ内のファイル名と一致するパターンが含まれています。
このドキュメントでは、次のトピックについて説明します。
Git の無視パターン
.gitignore
はグロブパターンを使用してファイル名を照合します。様々なシンボルを使用して独自のパターンを作成できます。
パターン | 一致する例 | 説明* |
---|---|---|
| 一致する例 | 説明* リポジトリ内の任意のディレクトリと照合するために、2つのアスタリスクをパターンの前に追加することができます。 |
| 一致する例 | 説明* ファイル名や親ディレクトリの名前に基づいてファイルを照合するために2つのアスタリスクを使用することもできます。 |
| 一致する例 | 説明* アスタリスクは、0 個以上の文字に一致するワイルドカードです。 |
| 一致する例 | 説明* 感嘆符をパターンの先頭に追加すると、パターンを否定します。ファイルが、あるパターンと一致するが、ファイルの後半で定義済みの否定パターンとも一致する場合、そのファイルは無視されません。 |
| 一致する例 | 説明* 否定パターンの後に定義されたパターンは、以前に無効化されたファイルを再度すべて無視します。 |
| 一致する例 | 説明* スラッシュを先頭に追加すると、リポジトリのルートにあるファイルのみ照合します。 |
| 一致する例 | 説明* 疑問符は正確に 1 文字に一致します。 |
| 一致する例 | 説明* 角括弧を使用して、指定した範囲の 1 文字を照合することもできます。 |
| 一致する例 | 説明* 角括弧は、指定されたセットの1つの文字と一致します。 |
| 一致する例 | 説明* 感嘆符を使用して、指定されたセット以外の文字を照合できます。 |
| 一致する例 | 説明* 範囲は数値またはアルファベットです。 |
| 一致する例 | 説明* スラッシュを付けないと、その名前を持つファイルおよびディレクトリのコンテンツの両方がパターンと照合されます。左の例の照合では、logs という名前のディレクトリとファイルの両方が無視されます。 |
| 一致する例 | 説明* スラッシュを追加して、パターンがディレクトリであることを示します。その名前に一致するリポジトリ内のディレクトリのすべてのコンテンツ (そのファイルとサブディレクトリをすべて含む) が無視されます。 |
| 一致する例 | 説明* 注意!左の例で |
| 一致する例 | 説明* 2つのアスタリスクは、0 個以上のディレクトリと一致します。 |
| 一致する例 | 説明* ワイルドカードはディレクトリ名でも使用できます。 |
| 一致する例 | 説明* 特定のディレクトリ内のファイルを指定するパターンは、リポジトリのルート相対パスです。(スラッシュを前に付けることもできますが、特に何も生じません。) |
** この説明は、ご使用の .gitignore ファイルが規則と同様に、リポジトリの最上位ディレクトリにあることを想定しています。リポジトリに複数の .gitignore ファイルがある場合、単に頭の中で "リポジトリルート" を ".gitignore ファイルを含むディレクトリ" と置き換えてください (そして、チームが混乱しないようにファイルを統合することを検討してください)。*
これらの文字に加えて、# を使用して .gitignore
ファイルにコメントを含めることができます。
# ignore all logs
*.log
.gitignore
パターン文字が含まれるファイルまたはディレクトリがある場合、\ を使用してそれらのパターン文字をエスケープできます。
# ignore the file literally named foo[01].txt
foo\[01\].txt
関連資料
Git Branch コマンド
ソリューションを見る
Bitbucket Cloud での Git の使用方法についてのチュートリアルです。
Git は通常 .gitignore
ファイルで定義される規則を無視します。このファイルは、ユーザーのリポジトリのルートにあります。しかし、ユーザーのリポジトリ内の様々なディレクトリにある複数の .gitignore
ファイルを定義するという選択肢があります。特定の .gitignore
ファイルの各パターンがそのファイルがあるディレクトリに対してテストされます。ただし、従来の、最もシンプルな方法はルートで単一の .gitignore
ファイルを定義することです。.gitignore
ファイルをチェックインすると、ユーザーのリポジトリ内の他のファイルと同様にバージョン管理され、プッシュ時にチームメートと共有されます。一般的に、.gitignore
に含めるパターンは、リポジトリの他のユーザーにとってメリットになるものに限定すべきです。
個人用の Git 無視規則
また、特定のリポジトリの個人用無視パターンを .git/info/exclude
にある特別なファイルに定義することもできます。これらはバージョン管理されず、ユーザーのリポジトリと共に配布されないので、自分にのみメリットがある可能性が高いパターンを含めるには適した場所です。たとえば、カスタムロギング設定や、リポジトリの作業ディレクトリにファイルを生成する特別な開発ツールがある場合、それらを .git/info/exclude
に追加して、誤って自分のリポジトリにコミットされないようにすることができます。
グローバルな Git 無視規則
さらに、Git core.excludesFile
プロパティを設定することで、ローカルシステム上のすべてのリポジトリに対するグローバル Git の無視パターンを定義することができます。このファイルは自分で作成する必要があります。グローバルな .gitignore
ファイルを配置すべき場所がよくわからない場合は、ホームディレクトリでかまいません (後で簡単に見つけることができます)。ファイルを作成したら、git config
でその場所を設定する必要があります。
$ touch ~/.gitignore
$ git config --global core.excludesFile ~/.gitignore
プロジェクトによって異なる種類のファイルが関連するため、グローバルに無視するパターンは慎重に選択する必要があります。特殊なオペレーティング システム ファイル (.ds_store
や thumbs.db
など) または一部の開発ツールで作成された一時ファイルが、グローバルに無視する一般的な候補になります。
以前にコミットされたファイルを無視
過去にコミットしたファイルを無視する場合、リポジトリからファイルを削除してから、それに対して .gitignore
ルールを追加する必要があります。--cached
オプションを git rm
で使用すると、ファイルはリポジトリから削除されますが、無視されたファイルとして作業ディレクトリに残ります。
$ echo debug.log >> .gitignore
$ git rm --cached debug.log
rm 'debug.log'
$ git commit -m "Start ignoring debug.log"
ファイルをリポジトリとローカル ファイル システムの両方から削除する場合は、--cached
オプションを省略できます。
無視されたファイルのコミット
-f
(または --force
) オプションを git add
で使用して、無視されたフィルをリポジトリに強制的にコミットすることができます。
$ cat .gitignore
*.log
$ git add -f debug.log
$ git commit -m "Force adding debug.log"
一般的なパターン (*.log
など) が定義されていても、特定のファイルをコミットしたい場合は、これを行うとよいでしょう。ただし、より良い解決策は一般的な規則の例外を定義することです。
$ echo !debug.log >> .gitignore
$ cat .gitignore
*.log
!debug.log
$ git add debug.log
$ git commit -m "Adding debug.log"
これは、チームメイトにとって明白で、混乱を招きにくいアプローチです。
無視されたファイルを隠す
.gitignore ファイルのデバッグ
.gitignore
パターンを複雑化したかパターンが複数の .gitignore
ファイルに分散している場合は、特定のファイルが無視されている理由を特定しにくい可能性があります。git check-ignore
コマンドを-v
(または --verbose
) オプションを指定して使用し、特定のファイルが無視される原因となっているパターンを特定できます。
$ git check-ignore -v debug.log
.gitignore:3:*.log debug.log
次のような出力が得られます。
<file containing the pattern> : <line number of the pattern> : <pattern> <file name>
必要に応じて、複数のファイル名を git check-ignore
に渡せます。名前自体は、リポジトリに存在するファイルと一致する必要はありません。
この記事を共有する
次のトピック
おすすめコンテンツ
次のリソースをブックマークして、DevOps チームのタイプに関する詳細や、アトラシアンの DevOps についての継続的な更新をご覧ください。