运行“git mv”与仅运行“mv”有什么区别

Ale*_*lls 11 git

当涉及到源代码控制系统时,运行以下命令之间的实际结果差异是什么:

git mv <src> <dest>  // see: https://git-scm.com/docs/git-mv
Run Code Online (Sandbox Code Playgroud)

与“较低”级别的命令相比

mv <src> <dest>
Run Code Online (Sandbox Code Playgroud)

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

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

161*_*903 7

git mv分阶段移动,这样你就可以在git commit之后。如果手动移动文件,则需要在提交前手动暂存移动。

除此之外,没有什么区别,只有Leon 的答案所涵盖的细微差别。git mv 的文档说:

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

...

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


Luc*_*ero 5

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

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

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

因此,一般来说,SCM 文件操作命令确实会更新文件系统以及 SCM 跟踪此更改所需的操作。


Leo*_*eon 5

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

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

mv <src> <dest>
Run Code Online (Sandbox Code Playgroud)

会默默地覆盖它,而

git mv <src> <dest>
Run Code Online (Sandbox Code Playgroud)

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

fatal: destination exists, source=<src>, destination=<dest>
Run Code Online (Sandbox Code Playgroud)

  • 如果 `this` 和 `that` 是文件夹,那么 `mv this that` 最终会像 `that/this` 一样,而如果 `that` 是一个文件,则会出现错误,说它不能 `mv` cant overwrite it 。该答案仅适用于两个文件。 (2认同)