リポジトリが複数の独立したプロジェクトで構成されていない限り、.gitignore
さまざまなファイルよりも、リポジトリのルートにファイルを1つだけ置くのが最も簡単なようです。これに関するオンラインの標準的なベストプラクティスはありますか。一方のアプローチが他方よりも優れている場合のオンライン分析はありますか?
リポジトリが複数の独立したプロジェクトで構成されていない限り、.gitignore
さまざまなファイルよりも、リポジトリのルートにファイルを1つだけ置くのが最も簡単なようです。これに関するオンラインの標準的なベストプラクティスはありますか。一方のアプローチが他方よりも優れている場合のオンライン分析はありますか?
回答:
.gitignore
異なる(サブ)ディレクトリーに複数のファイルが必要な状況が少なくとも2つ考えられます。
異なるディレクトリには、無視するファイルの種類があります。たとえば.gitignore
、プロジェクトの最上位ディレクトリにあるは生成されたプログラムをDocumentation/.gitignore
無視し、生成されたドキュメントは無視します。
(あなたが使用できる唯一の特定の(サブ)ディレクトリ内の指定したファイルを無視/sub/foo
に.gitignore
かかわらず、)。
.gitignore
ファイル内のパターンは、パターンに「/」が含まれていない限り、ファイルが存在する(サブ)ディレクトリとそのすべてのサブディレクトリに再帰的に適用されることに注意してください(たとえば、パターンname
は、ファイルに適用されname
、指定されたディレクトリとそのすべてのサブディレクトリで指定/name
されたファイルに適用されます)指定されたディレクトリでのみこの名前で)。
Documentation/**/*.html
(スラッシュはパターンを固定します。これ/foo
は、ファイルをディレクトリに直接固定するために使用されます)
接線の注記として、複数の.gitignore
ファイルを持つ機能が非常に役立つ1つのケースは、作業コピーにコミットするつもりのない余分なディレクトリが必要な場合です。.gitignore
そのディレクトリに1バイト(アスタリスクを1つだけ含む)を置くだけで、そのディレクトリに表示されることはありませんgit status
。
printf \* > .gitignore
(ディレクトリを削除すると、クリーンアップは自動的に行われます)。私は.git/info/exclude
より適切な選択である状況があると確信していますが、多くはありません。
.gitignore
もちろん、それぞれを独自のディレクトリに置くことができます。
ファイルを無視する責任があるgitignoreルールを確認するには、次を使用しgit check-ignore
ますgit check-ignore -v -- afile
。
また、.gitignore
ブランチごとに異なるバージョンのファイルを使用することもできます。一方のブランチがファイルを無視し、もう一方のブランチがファイルを無視しないようにするためのこのような構成はすでに見ました。たとえば、この質問を参照してください。
リポジトリに複数の独立したプロジェクトが含まれている場合は、サブモジュールとして参照することをお勧めします。
これは実際のベストプラクティスであり.gitignore
、グローバルな親プロジェクトの特定のリビジョンによって参照されているときに、それらのプロジェクトのそれぞれを(それぞれのファイルを使用して)独立して複製できます。
詳細については、サブモジュールの本質をご覧ください。
git 1.8.2(2013年3月)以降は、git check-ignore -v -- yourfile
どのgitignore実行(どの.gitignore
ファイルから)が ' yourfile
'に適用されているかを確認し、そのファイルが無視される理由をよりよく理解できることに注意してください。
「どのgitignore
ルールがファイルを無視しているか?」を参照してください。
プロシングル
見つけやすい。
リポジトリ内のいくつかのレベルで複数のgitignoreを使用している場合、除外ルールを見つけるのは非常に困難です。
複数のファイルを使用すると、通常、かなりの重複が発生します。
プロマルチ
スコープは、必要なファイルツリーの部分に「認識」します。
Gitはファイルのみを追跡するため、空の.gitignoreが「空の」ディレクトリをコミットする唯一の方法です。
(Git 1.8より前は、のようなパターンを除外する唯一の方法は、パターンmy/**.example
を使用my/.gitignore
してを作成することでした**.foo
。この理由は、今のようには適用できません/my/**/*.example
。)
私はすべての除外を見つけることができる単一のファイルをはるかに好みます。ディレクトリごとの.svnを見逃したことはありません。また、ディレクトリごとの.gitignoreを見逃すこともありません。
とはいえ、複数のgitignoreが非常に一般的です。それらを使用する場合は、少なくともそれらの使用に一貫性を持たせて、作業に適したものにする必要があります。たとえば、ルートから1レベルだけのディレクトリに配置できます。
empty
)をアップロードする方が一般的であることがわかりました。