1

を引用する必要があると言われています*

git rm \*.log

Git には内部ファイル拡張機能があるためです。しかし、何が間違っているのか、それとそれを使用することの違いは何ですか:

git rm *.log

または別の状況では、次のようなもの

git rm log/*.log

シェルがそれを展開するか、gitに展開させるか?

4

2 に答える 2

2

最初の (エスケープされた) 例は git によって展開され、実際にツリーに存在するかどうかに関係なく、追跡されたすべてのファイルと照合されます。2 つ目はシェルによって展開され、存在するファイルのみに一致します。たとえば、これを実行rm *.log; git rm *.logするとディレクトリからファイルが削除されますが、git インデックスからは削除されません。実際、ファイルを指定していないため、「git rm」コマンドはエラーを返します。

于 2012-08-27T23:18:43.010 に答える
1

私は git を使用しないので、これは一般的な考え方です。

これを見てください:

stieber@gatekeeper:~$ echo *.cpp
Test1.cpp Test2.cpp Test.cpp

対。

stieber@gatekeeper:~$ echo \*.cpp
*.cpp

ここで、「echo」がソースコード リポジトリで動作するものである場合、最初のバージョンは作業ディレクトリに存在するファイルを具体的にアドレス指定します。これは、「git」ソフトウェアはワイルドカードを展開します。私の作業ディレクトリは、ソースコード リポジトリが認識しているファイルのサブセットにすぎない可能性があります。

多くの場合、作業ディレクトリはリポジトリにあるものとほぼ同じである必要があり、その場合、実際の違いはありませんが、最初にそれらをチェックアウトすることを気にせずに、リポジトリで「これらのファイルをすべて消去する」などのことを行うこともできます (とにかくそれらを消去したいのなら、どうしてですか...)

git がパス名をどのように扱うかによって、パス名でパターンを指定する方が違いが大きくなる可能性があります: /*.cpp は、ルート ディレクトリ内のファイルを具体的に一覧表示しますが、これはおそらくどのリポジトリにも含まれていません。これを /\*.cpp としてエスケープすると、代わりにリポジトリ ソフトウェアが内部ルートとして使用するすべての一致するファイルで作業するように指示される場合があります。

于 2012-08-27T23:25:29.333 に答える