セットアップと設定
プロジェクトの取得と作成
基本的なスナップショット作成
ブランチとマージ
プロジェクトの共有と更新
検査と比較
パッチ適用
デバッグ
メール
外部システム
サーバー管理
ガイド
- gitattributes
- コマンドラインインターフェースの慣習
- 日常のGit
- よくある質問 (FAQ)
- 用語集
- フック
- gitignore
- gitmodules
- リビジョン
- サブモジュール
- チュートリアル
- ワークフロー
- すべてのガイド...
管理
プラミングコマンド
- 2.42.1 → 2.49.0 変更なし
-
2.42.0
2023-08-21
- 2.41.1 → 2.41.3 変更なし
-
2.41.0
2023-06-01
- 2.34.1 → 2.40.4 変更なし
-
2.34.0
2021-11-15
- 2.33.1 → 2.33.8 変更なし
-
2.33.0
2021-08-16
- 2.32.1 → 2.32.7 変更なし
-
2.32.0
2021-06-06
- 2.22.2 → 2.31.8 変更なし
-
2.22.1
2019-08-11
-
2.22.0
2019-06-07
- 2.20.1 → 2.21.4 変更なし
-
2.20.0
2018-12-09
- 2.19.1 → 2.19.6 変更なし
-
2.19.0
2018-09-10
- 2.17.0 → 2.18.5 変更なし
-
2.16.6
2019-12-06
- 2.10.5 → 2.15.4 変更なし
-
2.9.5
2017-07-30
- 2.5.6 → 2.8.6 変更なし
-
2.4.12
2017-05-05
- 2.3.10 変更なし
- 2.2.3 変更なし
-
2.1.4
2014-12-17
-
2.0.5
2014-12-17
説明
gitignore
ファイルは、Gitが無視すべき意図的に追跡対象外のファイルを指定します。Gitによって既に追跡されているファイルは影響を受けません。詳細については、以下のNOTESを参照してください。
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はパフォーマンス上の理由から除外されたディレクトリをリストしないため、含まれるファイルに対するパターンは、どこで定義されていても効果がありません。リテラルの「!
」で始まるパターン(例:「\!important!.txt
」)については、最初の「!
」の前にバックスラッシュ("\
")を置いてください。 -
スラッシュ「
/
」はディレクトリセパレータとして使用されます。セパレータは.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つの連続したアスタリスク、そしてスラッシュが続くパターンは、ゼロ個以上のディレクトリに一致します。たとえば、「
a/**/b
」は、「a/b
」、「a/x/b
」、「a/x/y/b
」などに一致します。 -
その他の連続するアスタリスクは通常の(ワイルドカード)アスタリスクと見なされ、以前の規則に従って一致します。
設定
オプションの設定変数core.excludesFile
は、$GIT_DIR/info/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におけるパススペックの一般的な動作と一貫しています)。 -
パターン
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
Git
git[1]スイートの一部