运行“git mv”和“mv”之间的区别是什么?

时间:2016-10-19 07:18:35

标签: git

在源控制系统中,在运行如下命令之间的结果有什么实际差异:

git mv <src> <dest>  // see: https://git-scm.com/docs/git-mv

与“低级”命令相比,如

mv <src> <dest>

从版本/源控制系统的角度看,结果有什么不同吗?或者任何人/任何人的观点?

其他git命令也是如此,例如git rm I just want to know what difference it makes between running the git functions versus bash functions, or whatever.

3 个答案:

答案 0 :(得分:4)

由于您已使用不同的SCM产品标记了问题,而不只是git我以更一般的方式回答了这个问题。

每个源控制系统都会跟踪有关文件的不同信息。例如,在Mercurial中,跟踪移动,以便 - 删除和添加重命名的文件时,它还存储有关重命名文件的信息,以及之前的文件。

此外,删除文件时,通常还需要将其从SCM中删除(有时也称为遗忘)。

一般而言,SCM文件操作命令会更新文件系统以及SCM跟踪此更改所需的操作。

答案 1 :(得分:3)

git mv分阶段进行,因此您可以git commit之后。如果手动移动文件,则需要在提交之前手动暂存移动。

除此之外, there is no difference 只有微不足道的Leon's answer封面。 git mv的文档说:

  

移动或重命名文件,目录或符号链接。

     

...

     

成功完成后会更新索引,但仍必须提交更改。

答案 2 :(得分:2)

只是一条额外的信息,补充其他答案(这仅适用于giv mv):

如果文件<dest>存在(无论是否跟踪),那么

mv <src> <dest>

会默默覆盖它,而

git mv <src> <dest>

拒绝覆盖它,并显示以下错误消息:

fatal: destination exists, source=<src>, destination=<dest>