.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