を引用する必要があると言われています*
。
git rm \*.log
Git には内部ファイル拡張機能があるためです。しかし、何が間違っているのか、それとそれを使用することの違いは何ですか:
git rm *.log
または別の状況では、次のようなもの
git rm log/*.log
シェルがそれを展開するか、gitに展開させるか?
を引用する必要があると言われています*
。
git rm \*.log
Git には内部ファイル拡張機能があるためです。しかし、何が間違っているのか、それとそれを使用することの違いは何ですか:
git rm *.log
または別の状況では、次のようなもの
git rm log/*.log
シェルがそれを展開するか、gitに展開させるか?
最初の (エスケープされた) 例は git によって展開され、実際にツリーに存在するかどうかに関係なく、追跡されたすべてのファイルと照合されます。2 つ目はシェルによって展開され、存在するファイルのみに一致します。たとえば、これを実行rm *.log; git rm *.log
するとディレクトリからファイルが削除されますが、git インデックスからは削除されません。実際、ファイルを指定していないため、「git rm」コマンドはエラーを返します。
私は git を使用しないので、これは一般的な考え方です。
これを見てください:
stieber@gatekeeper:~$ echo *.cpp
Test1.cpp Test2.cpp Test.cpp
対。
stieber@gatekeeper:~$ echo \*.cpp
*.cpp
ここで、「echo」がソースコード リポジトリで動作するものである場合、最初のバージョンは作業ディレクトリに存在するファイルを具体的にアドレス指定します。これは、「git」ソフトウェアはワイルドカードを展開します。私の作業ディレクトリは、ソースコード リポジトリが認識しているファイルのサブセットにすぎない可能性があります。
多くの場合、作業ディレクトリはリポジトリにあるものとほぼ同じである必要があり、その場合、実際の違いはありませんが、最初にそれらをチェックアウトすることを気にせずに、リポジトリで「これらのファイルをすべて消去する」などのことを行うこともできます (とにかくそれらを消去したいのなら、どうしてですか...)
git がパス名をどのように扱うかによって、パス名でパターンを指定する方が違いが大きくなる可能性があります: /*.cpp は、ルート ディレクトリ内のファイルを具体的に一覧表示しますが、これはおそらくどのリポジトリにも含まれていません。これを /\*.cpp としてエスケープすると、代わりにリポジトリ ソフトウェアが内部ルートとして使用するすべての一致するファイルで作業するように指示される場合があります。