.gitignoreファイルでGit管理対象外のファイルを無視する
はじめに
Gitで管理対象外のファイルがある場合に、gitignore
ファイルを作成することで、対象のファイルを無視することができます。ここではgitignore
ファイルの書き方についてまとめていきます。
環境
- OS : Windows 7 Pro 64bit
- git : git version 2.27.0.windows.1
gitignoreファイルについて
gitignore
ファイルには、各行に除外するファイルのパターンを記述します。
- 既にGitによって管理されているファイルは除外されません(除外するためには対象のインデックスを削除する必要があります)
- ルートフォルダおよびサブフォルダにgitignoreファイルを置くことができ、上位レベルのファイルのパターンは下位レベルのファイルによって上書きされます。
次のようなフォルダ構成の場合、root
直下の.gitignore
ファイルのパターンはtmp
フォルダの.gitignore
ファイルのパターンによって上書きされます。
1root 2 ┣ .git 3 ┣ public 4 ┃ ┗ index.html 5 ┣ tmp 6 ┃ ┗ .gitignore 7 ┗ .gitignore
但し、gitignore
ファイルはGitで管理されるため、ローカル環境のみで使用するファイルを除外する場合はgitignore
ファイルを使用するのではなく、.git/info/exclude
ファイルにパターンを記述します。
.gitignoreの書き方
.gitignoreファイルのパターンの書き方は以下の通りです。
- 空の行は一致せず無視されるため、読みやすさの区切りとして使用できる。
- #で始まる行は、コメントとして機能する。ハッシュで始まるパターンの場合はその前にエスケープ("\")を指定する。
- 末尾のスペースはエスケープされていない場合、無視される。
- !は否定を表し、以前のパターンで除外されたファイルを再び含める。但し、親ディレクトリが除外されている場合は、そのファイルを含めることはできない。
- スラッシュ("/")はディレクトリの区切りとして使用される。
- スラッシュから始まる場合は、その
.gitignore
ファイルからの相対パスになる。 - パターンがスラッシュで終わる場合は、ディレクトリとの一致になる。
- アスタリスク("*")は、スラッシュ以外の全てに一致する。
- 先頭からアスタリスクが2つ連続する場合は、全てのディレクトリで一致することを意味する。
- 末尾にアスタリスクが2つ連続する場合は、それ以下の全てに一致する。
パターンの書き方の例
- 例)test.html という名前のファイルを無視する場合
現在のディレクトリ以下にあるtest.html
というファイル名のものが全て無視されます。
test.html
やa/test.html
など。
.gitignore1test.html
- 例)拡張子が.txtのファイルを無視する場合
現在のディレクトリ以下にある.txt
という拡張子のファイルが全て無視されます。
a.txt
やb.txt
、a/c.txt
など。
.gitignore1*.txt
- 例)tmpという名前のフォルダを無視する場合
現在のディレクトリ以下にあるtmp/
ディレクトリが全て無視されます。
tmp/
やa/tmp/
など。
.gitignore1tmp/
- 例)拡張子が.logのファイルを無視するが、error.logのファイルを無視しない場合
.gitignore1*.log 2!error.log
空のフォルダを管理対象にする
Gitは空のフォルダを管理対象にしないため、空のフォルダをGitに含める場合は.gitkeep
という名前の空のファイルを作成し、フォルダに含めておきます。
空のファイルならなんでもいいですが、分かりやすくgitkeep
という名前が使われています。
- 例)uploadフォルダを管理対象に含める場合
1root 2 ┣ upload 3 ┃ ┗ .gitkeep 4 ┗ .gitignore
excludeでの指定について
あるファイルをリポジトリには含めないが、ローカルのリポジトリには置いておきたい場合、$GIT_DIR/info/exclude
にパターンを指定します。
$GIT_DIR
が.git
の場合は以下のような場所になります
1.git 2 ┗ info 3 ┗ exclude