developers blog

.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.htmla/test.htmlなど。

.gitignore
1test.html
  • 例)拡張子が.txtのファイルを無視する場合

現在のディレクトリ以下にある.txtという拡張子のファイルが全て無視されます。
a.txtb.txta/c.txtなど。

.gitignore
1*.txt
  • 例)tmpという名前のフォルダを無視する場合

現在のディレクトリ以下にあるtmp/ディレクトリが全て無視されます。
tmp/a/tmp/など。

.gitignore
1tmp/
  • 例)拡張子が.logのファイルを無視するが、error.logのファイルを無視しない場合
.gitignore
1*.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