セットアップと設定
プロジェクトの取得と作成
基本的なスナップショット
ブランチとマージ
プロジェクトの共有と更新
検査と比較
パッチ
デバッグ
メール
外部システム
サーバー管理
- 2.42.1 → 2.47.0 変更なし
-
2.42.0
08/21/23
- 2.41.1 → 2.41.2 変更なし
-
2.41.0
06/01/23
- 2.34.1 → 2.40.3 変更なし
-
2.34.0
11/15/21
- 2.33.1 → 2.33.8 変更なし
-
2.33.0
08/16/21
- 2.32.1 → 2.32.7 変更なし
-
2.32.0
06/06/21
- 2.22.2 → 2.31.8 変更なし
-
2.22.1
08/11/19
-
2.22.0
06/07/19
- 2.20.1 → 2.21.4 変更なし
-
2.20.0
12/09/18
- 2.19.1 → 2.19.6 変更なし
-
2.19.0
09/10/18
- 2.17.0 → 2.18.5 変更なし
-
2.16.6
12/06/19
- 2.10.5 → 2.15.4 変更なし
-
2.9.5
07/30/17
- 2.5.6 → 2.8.6 変更なし
-
2.4.12
05/05/17
- 2.3.10 変更なし
- 2.2.3 変更なし
-
2.1.4
12/17/14
-
2.0.5
12/17/14
説明
.gitignore
ファイルは、Gitが無視するべき意図的に追跡されていないファイルを指定します。既にGitによって追跡されているファイルには影響しません。詳細は以下の「注記」を参照してください。
.gitignore
ファイルの各行はパターンを指定します。パスを無視するかどうかを決定する際、Gitは通常、複数のソースから.gitignore
パターンをチェックし、以下の優先順位で(同じ優先順位内では、最後に一致したパターンが結果を決定します)処理します。
-
対応するコマンドからコマンドラインで読み込まれたパターン。
-
パスと同じディレクトリ、または親ディレクトリ(作業ツリーのトップレベルまで)にある
.gitignore
ファイルから読み込まれたパターン。上位レベルのファイルのパターンは、ファイルを含むディレクトリまで下位レベルのファイルのパターンによって上書きされます。これらのパターンは、.gitignore
ファイルの位置を基準に一致させます。プロジェクトは通常、プロジェクトビルドの一部として生成されたファイルのパターンを含むこのような.gitignore
ファイルをリポジトリに含めます。 -
$GIT_DIR/info/exclude
から読み込まれたパターン。 -
設定変数
core.excludesFile
で指定されたファイルから読み込まれたパターン。
どのファイルにパターンを配置するかは、パターンの使用方法によって異なります。
-
バージョン管理され、クローンによって他のリポジトリに配布されるべきパターン(つまり、すべての開発者が無視したいファイル)は、
.gitignore
ファイルに配置する必要があります。 -
特定のリポジトリに固有であるが、他の関連するリポジトリと共有する必要がないパターン(たとえば、リポジトリ内にあるが、特定のユーザーのワークフローに固有の補助ファイル)は、
$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ツールは、上記で指定されたソースのパターンを使用します。
パターンの形式
-
空行はファイルに一致しません。そのため、可読性のためにセパレーターとして使用できます。
-
#で始まる行はコメントとして機能します。ハッシュで始まるパターンには、最初にバックスラッシュ( "
\
" )を付けます。 -
末尾のスペースは、バックスラッシュ( "
\
" )で引用されていない限り無視されます。 -
オプションのプレフィックス "
!
" はパターンを否定します。以前のパターンによって除外された一致するファイルは、再び含まれるようになります。ファイルの親ディレクトリが除外されている場合は、ファイルを再び含めることはできません。Gitはパフォーマンス上の理由から除外されたディレクトリをリストしません。そのため、含まれるファイルのパターンはどこに定義されていても効果がありません。 -
スラッシュ "
/
" はディレクトリセパレーターとして使用されます。セパレーターは、.gitignore
検索パターンの先頭、中央、または末尾に存在する可能性があります。 -
パターンの先頭または中央(または両方)にセパレーターがある場合、そのパターンは特定の
.gitignore
ファイル自体のディレクトリレベルを基準にした相対パスになります。それ以外の場合は、パターンは.gitignore
レベル以下の任意のレベルにも一致する可能性があります。 -
パターンの末尾にセパレーターがある場合、パターンはディレクトリにのみ一致します。それ以外の場合は、ファイルとディレクトリの両方に一致する可能性があります。
-
たとえば、パターン
doc/frotz/
はdoc/frotz
ディレクトリに一致しますが、a/doc/frotz
ディレクトリには一致しません。ただし、frotz/
はディレクトリであるfrotz
およびa/frotz
に一致します(すべてのパスは.gitignore
ファイルを基準にした相対パスです)。 -
アスタリスク "
*
" はスラッシュを除く任意の文字に一致します。"?
" は "/
" を除く任意の1文字に一致します。範囲表記(例:[a-zA-Z]
)を使用して、範囲内の文字のいずれかに一致させることができます。詳細については、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
" などに一致します。 -
その他の連続したアスタリスクは通常のワイルドカードとして扱われ、上記ルールに従って一致します。
設定
オプションの設定変数core.excludesFile
は、$GIT_DIR/info/exclude
と同様に、除外するファイル名のパターンを含むファイルへのパスを示します。excludeファイルのパターンは、$GIT_DIR/info/exclude
のパターンに加えて使用されます。
注記
.gitignoreファイルの目的は、Gitによって追跡されない特定のファイルが追跡されないままにすることを保証することです。
現在追跡されているファイルの追跡を停止するには、git rm --cachedを使用してインデックスからファイルを削除します。その後、ファイル名を.gitignore
ファイルに追加して、ファイルが後のコミットで再導入されないようにすることができます。
Gitは、作業ツリー内の.gitignore
ファイルにアクセスする際にシンボリックリンクをたどりません。これにより、ファイルがインデックスまたはツリーからアクセスされる場合とファイルシステムからアクセスされる場合の動作が整合性が保たれます。
例
-
パターン
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
(ディレクトリ)にマッチしますが、foo/bar/hello.c
(通常のファイル)にはマッチしません。これは、パターン内のアスタリスクがスラッシュを含む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
Git
git[1]スイートの一部