“与”的区别是什么;吉特rm*.log";vs";git rm\*.log";?

“与”的区别是什么;吉特rm*.log";vs";git rm\*.log";?,git,Git,据说我们需要在以下内容中引用*: git rm \*.log 因为Git有其内部文件扩展。但是有什么不对,或者使用它与: git rm *.log 或者在另一种情况下,比如 git rm log/*.log 如果shell扩展它而不是让git扩展它?第一个(转义的)示例将由git扩展,并将匹配所有跟踪文件,无论它们是否实际存在于树中。第二个由shell展开,并且将只匹配存在的文件。例如,执行rm*.log;git rm*.log将从目录中删除文件,但不会从git索引中删除文件。事实上,“g

据说我们需要在以下内容中引用
*

git rm \*.log
因为Git有其内部文件扩展。但是有什么不对,或者使用它与:

git rm *.log
或者在另一种情况下,比如

git rm log/*.log

如果shell扩展它而不是让git扩展它?

第一个(转义的)示例将由git扩展,并将匹配所有跟踪文件,无论它们是否实际存在于树中。第二个由shell展开,并且将只匹配存在的文件。例如,执行
rm*.log;git rm*.log
将从目录中删除文件,但不会从git索引中删除文件。事实上,“git rm”命令将返回一个错误,因为您没有指定任何文件。

我不使用git,所以这是一个一般思路

看看这个:

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

现在,如果“echo”是在源代码存储库上运行的东西,那么第一个版本将专门处理存在于我的工作目录中的文件,如果“git”软件扩展通配符,那么第二个版本可能会使用相同的列表,也可能不相同。我的工作目录可能只是源代码存储库知道的文件的子集

在许多情况下,工作目录应该与存储库中的目录基本相同,在这种情况下,应该没有什么真正的区别,但是您也可以在存储库中执行“擦除所有这些文件”之类的操作,而不必首先费心签出它们(如果您仍然想擦除它们,为什么要这样做…)


根据git处理路径名的方式,使用路径名指定模式可能会有更大的区别:/*.cpp会特别列出我的根目录中的文件,这些文件可能不属于任何存储库。将其转义为/\*.cpp可能会告诉存储库软件以其内部根目录的形式处理匹配的文件。

Bash默认情况下,如果没有找到匹配的文件,
*.log
,它只会传递
*.log
stieber@gatekeeper:~$ echo \*.cpp
*.cpp