SYNOPSIS
$XDG_CONFIG_HOME/git/ignore, $GIT_DIR/info/exclude, .gitignore
DESCRIPTION
gitignore ファイルは、Gitが無視する必要のある意図的に追跡しないファイルを指定します。 Gitによってすでに追跡されているファイルは影響を受けません。 詳細については、以下のNOTESを参照してください。
gitignore ファイルの各行にはパターンを指定します。パスを無視するかどうかを決定するとき、Gitは通常、複数のソースからの gitignore パターンを、最高から最低の順に以下の優先順位でチェックします(各レベルの優先順位内では最後に一致するパターンが結果を決定します)。
-
パターンは、それらをサポートするコマンドのコマンドラインから読み取られます。
-
そのパスから見て同じディレクトリまたは親ディレクトリ(作業ツリーの最上位まで)にある
.gitignoreファイルから読み取られたパターン。ディレクトリの上位レベルのファイルのパターンは、.gitignoreファイルを含むディレクトリまでディレクトリ下位レベルの.gitignoreファイルのパターンによって上書きされます。これらのパターンは、.gitignoreファイルのあるディレクトリを基準にしてマッチします。 プロジェクトは通常、リポジトリにそのような、プロジェクトビルドの部品として生成されたファイルのパターンを含んだ.gitignoreファイルを含みます。(訳注:各サブディレクトリに .gigignore ファイルを含む事ができ、各ディレクトリの .gitignore はその親ディレクトリまたはその上位ディレクトリの .gitignore をオーバーライドする) -
パターンは
$GIT_DIR/info/excludeから読み取られます。 -
構成変数
core.excludesFileで指定されたファイルから読み取られたパターン。
パターンを配置するファイルは、パターンの使用方法によって異なります。
-
バージョン管理され、クローンを介して他のリポジトリに配布される必要があるパターン(つまり、すべての開発者が無視したいファイル)は、
.gitignoreファイルに入れる必要があります。 -
特定のリポジトリに固有であるが、他の関連するリポジトリと共有する必要のないパターン(たとえば、リポジトリ内に存在するが1人のユーザーのワークフローに固有の補助ファイル)は、
$GIT_DIR/info/excludeファイルに配置する必要があります。 -
ユーザーがすべての状況でGitに無視させたいパターン(たとえば、選択したユーザーのエディタによって生成されたバックアップファイルまたは一時ファイル)は、通常、ユーザーの
~/.gitconfigのcore.excludesFileで指定されたファイルに入ります。デフォルト値は $XDG_CONFIG_HOME/git/ignore です。 $XDG_CONFIG_HOME が設定されていないか空の場合、代わりに $HOME/.config/git/ignore が使用されます。
git ls-files や git read-tree などの基盤となるGit配管コマンドツールは、 コマンドラインオプションで指定された gitignore パターンを読み取るか、 コマンドラインオプションで指定されたファイルから読み取ります。 git status や git add などの高レベルのGitツールは、 上記で指定されたソースからのパターンを使用します。
PATTERN FORMAT
-
空行はどのファイルともマッチしないため、読みやすくするための区切りとして使えます。
-
# で始まる行はコメントとして機能します。 # で始まるパターンの最初の # の前にはバックスラッシュ(\)を置きます。
-
末尾の空白は、バックスラッシュ(\)でクォートされていない限り無視されます。
-
パターンを否定するオプションのプレフィックス ! 。以前のパターンで除外されたマッチするファイルは、再び含まれるようになります。そのファイルの親ディレクトリが除外されている場合、そのファイルを再インクルードすることはできません。Gitはパフォーマンス上の理由から除外されたディレクトリを一覧表示しないため、含まれているファイルのパターンは、それらがどこで定義されていても効果がありません。 リテラル ! で始まるパターンの場合は、最初の ! の前にバックスラッシュ(\)を付けます(例: \!important!.txt)。
-
スラッシュ
/はディレクトリ区切り文字として使用されます。区切り文字は、.gitignore検索パターンの最初、中間、または最後に発生する可能性があります。 -
パターンの先頭または中間(あるいはその両方)に区切り文字がある場合、パターンは特定の
.gitignoreファイル自体のディレクトリレベルに関連しています。そうしないと、パターンは.gitignoreレベルより下の任意のレベルでも一致する可能性があります。 -
パターンの最後に区切り文字がある場合、パターンはディレクトリのみに一致します。それ以外の場合、パターンはファイルとディレクトリの両方に一致する可能性があります。
-
たとえば、パターン
doc/frotz/はdoc/frotzディレクトリと一致しますが、a/doc/frotzディレクトリとは一致しません。 ただし、frotz/はfrotzおよびディレクトリであるa/frotzと一致します(すべてのパスは.gitignoreファイルのあるディレクトリからの相対パスです)。 -
アスタリスク(*)はスラッシュ(
/)以外のものと一致します。文字 ? は、/以外の任意の1文字と一致します。 範囲表記、例えば [a-zA-Z] は、範囲内の文字の1つと一致させるために使用できます。詳細については、 fnmatch(3)および FNM_PATHNAME フラグを参照してください。
フルパス名と一致するパターンの、2つの連続するアスタリスク(**)は、以下の特別な意味を持つ場合があります:
-
先頭の ** の後にスラッシュ(
/)が続く場合は、すべてのディレクトリで一致することを意味します。 たとえば、 **/foo は、パターンfooと同じように、任意の場所のファイルまたはディレクトリfooと一致します。 **/foo/bar は、ディレクトリfooの直下にあるファイルまたはディレクトリbarと一致します。 -
末尾の
/** は内部のすべてに一致します。 たとえば、abc/** は、.gitignoreファイルの場所を基準にして、ディレクトリabc内のすべてのファイルと無限の深さで一致します。 -
スラッシュ(
/)の後に2つの連続するアスタリスク(**)が続く場合、スラッシュは0個以上のディレクトリに一致します。たとえば、a/**/b はa/bやa/x/bやa/x/y/bなどと一致します。 -
他の連続するアスタリスクは通常のアスタリスクと見なされ、以前のルールに従って一致します。
CONFIGURATION
オプションの構成変数 core.excludesFile は、 $GIT_DIR/info/exclude と同様に、除外するファイル名のパターンを含むファイルへのパスを示します。 $GIT_DIR/info/exclude のパターンに加えて、excludeファイルのパターンが使用されます。
NOTES
gitignoreファイルの目的は、Gitによって未だ追跡されていない特定のファイルがGitによって追跡される事が無いようにすることです。
現在追跡されているファイルの追跡を停止するには、 git rm --cached を使用してインデックスからファイルを削除します。 そのファイル名を .gitignore ファイルに追加すると、 その後のコミットでそのファイルが再導入されるのを防ぐことができます。
作業ツリーの .gitignore ファイルにアクセスするとき、Gitはシンボリックリンクをたどりません。これにより、ファイルシステムからではなく、インデックスまたはツリーからファイルにアクセスする場合の動作の一貫性が保たれます。
EXAMPLES
-
パターン
hello.* は、 名前がhello.で始まるすべてのファイルまたはディレクトリにマッチします。 これをディレクトリのみに制限し、 そのサブディレクトリには制限したくない場合は、 パターンの前にスラッシュを付けることができます。 つまり、/hello.* とします。 このパターンはhello.txtやhello.cとマッチしますが、a/hello.javaとはマッチしません。 -
パターン
foo/は、ディレクトリfooとその下のパスに一致しますが、通常のファイルまたはシンボリックリンクfooには一致しません(これは、Gitでのpathspecの一般的な動作方法と一致します) -
パターン
doc/frotzと/doc/frotzは、どの.gitignoreファイルでも同じ効果があります。つまり、パターンの中間にスラッシュ(/)がある場合、先頭のスラッシュは関係ありません。 -
パターン
foo/* は、foo/test.json(通常のファイル) やfoo/bar(ディレクトリ)とマッチしますが、パターンのアスタリスク(*)がスラッシュ(/)を含むbar/hello.cとマッチしないため、foo/bar/hello.c(通常のファイル)とは一致しません。
$ git status
[...]
# Untracked files:
[...]
# Documentation/foo.html
# Documentation/gitignore.html
# file.o
# lib.a
# src/internal.o
[...]
$ cat .git/info/exclude
# ignore objects and archives, anywhere in the tree.
*.[oa]
$ cat Documentation/.gitignore
# ignore generated html files,
*.html
# except foo.html which is maintained by hand
!foo.html
$ git status
[...]
# Untracked files:
[...]
# Documentation/foo.html
[...]
別の例:
$ cat .gitignore
vmlinux*
$ ls arch/foo/kernel/vm*
arch/foo/kernel/vmlinux.lds.S
$ echo '!/vmlinux*' >arch/foo/kernel/.gitignore
2番目の .gitignore は、Gitが arch/foo/kernel/vmlinux.lds.S を無視するのを防ぎます。
特定のディレクトリ foo/bar 以外のすべてを除外する例(/* に注意してください。スラッシュ(/)なしでワイルドカード(*)は、 foo/bar 内のすべても除外します):
$ cat .gitignore
# exclude everything except directory foo/bar
/*
!/foo
/foo/*
!/foo/bar
SEE ALSO
GIT
Part of the git(1) suite