私は.gitignore
構文をより明確に理解しようとしています。特にhttps://github.com/github/gitignore gitignoresに関する限りです。
先頭のスラッシュを使用して、.gitignore
ファイルの場所(http://git-scm.com/docs/gitignoreからの相対パス)のみに一致することがわかります。
先頭のスラッシュはパス名の先頭と一致します。たとえば、「/ *。c」は「cat-file.c」と一致しますが、「mozilla-sha1 / sha1.c」とは一致しません。
しかし、先頭のスラッシュを削除するとどうなりますか?私が理解した限りでは、2つのケースがあります。
- パターンにスラッシュが含まれていない場合(または末尾のスラッシュのみが含まれている場合、つまりディレクトリと一致する必要がある場合)、検索はディレクトリツリー全体で実行されます。例えば、パターンが
dir/
一致する<root>/dir
、<root>/a/dir
、<root>/a/b/c/.../dir
、など、どこ<root>
の場所である.gitignore
ファイル。 - パターンにスラッシュが含まれていて、それが末尾位置にない(最後の文字ではない)場合は、
.gitignore
ファイルの場所に関連するパス名とのみ一致します。
これらは私がこの行動をチェックするために作った例です:
# Directory structure:
<root>
├─ dir/
│ └─ test
├─ src/
│ ├─ dir/
│ │ └─ test
test file is there only because Git does not track empty directories.
最初のテスト:
# .gitignore
dir/
# git status
nothing to commit
したがって、Gitは両方のdir
ディレクトリを無視しています。これはケース番号1と一致します。パターンにはスラッシュがありません(末尾のスラッシュを除く)。そのため、Gitはパターンに一致するすべてを無視して、ディレクトリツリー全体を監視しています。
2番目のテスト:
# .gitignore
/dir/
# git status
Untracked files:
src/
ここでdir
は、パターンの先頭のスラッシュのおかげで、Gitはルートディレクトリの直下のディレクトリのみを無視しています。
3番目のテスト:
# .gitignore
dir/*
# git status
Untracked files:
src/
これは、ケース番号2と一致します。パターンには、スラッシュが含まれているため、ルートディレクトリから始まるパス名と見なされます。
本当の質問の時間です。このgitignoreファイルについて考えてみましょう。downloader/
たとえば、ディレクトリを無視した場合、実際downloader
には、ディレクトリツリー全体で見つかったすべてのディレクトリを無視していませんか?これは、以前にGitの動作について見たものから、私が考えさせられていることです。
それで、downloader
中にディレクトリが含まれるカスタムモジュールがある場合、Magentoのルートにある通常のモジュールと同様に、予期せず無視されますか?これは実際にはすでに起こっており、バグを見つけるのが非常に難しいため、これはちょっと考え直しの質問です。
だから、Magentoの中.gitignore
、彼らは正しくルートから始まるパス名と照合されているので、多くのパターンは、スラッシュが含まれていますが、いくつかのケースは、などがある(私はところで、一例としてのみに言及しています)ファイルdownloader/
またはerrors/
こと、私が誤っていない場合、潜在的に危険であり、おそらくとに変更する必要が/downloader/
あり/errors/
ます。
より一般的な質問として、ルートから明示的に開始するパス名を選択し、スラッシュを含むパターンに使用しない場合は、スラッシュを含まないパターン(後続のものを除く)に常に先頭のスラッシュを使用するか、または明確にするために常に先頭のスラッシュを使用しますか?あなたはそれについてどう思いますか?
長い記事をお読みいただき、誠にありがとうございます。