“git rm * .log”和“git rm \ * .log”有什么区别?

时间:2012-08-27 23:13:17

标签: git

据说我们需要引用* in:

git rm \*.log

因为Git有内部文件扩展。但是有什么不对或使用那个vs:

之间有什么区别
git rm *.log

或在其他情况下,如

git rm log/*.log

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

我不使用git,所以这更像是一种思路。

看看这个:

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

VS。

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

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

在许多情况下,工作目录应该是存储库所具有的,在这种情况下应该没有真正的区别,但是您也可以在存储库中执行诸如“擦除所有这些文件”之类的操作,而无需先打扰检查他们出去了(如果你想要删除他们,你为什么会这样做...)

根据git如何处理路径名,指定带有路径名的模式可能更有区别:/ *。cpp会专门列出我的根目录中的文件,这可能不是任何存储库的一部分。将此转义为/\*.cpp可能会告诉存储库软件处理匹配文件,无论它使用什么作为内部根目录。