使用类似以下命令时,源代码控制系统的结果实际上有何不同:
git mv <src> <dest> # see: https://git-scm.com/docs/git-mv
与“低级”命令相比
mv <src> <dest>
从版本/源代码控制系统的角度来看,结果是否有任何差别?或者从任何事物/任何人的角度来看是否有差别?
对于其他像git rm
这样的git命令也是一样。我只是想知道在运行git函数与bash函数或其他函数之间有什么区别。
使用类似以下命令时,源代码控制系统的结果实际上有何不同:
git mv <src> <dest> # see: https://git-scm.com/docs/git-mv
与“低级”命令相比
mv <src> <dest>
从版本/源代码控制系统的角度来看,结果是否有任何差别?或者从任何事物/任何人的角度来看是否有差别?
对于其他像git rm
这样的git命令也是一样。我只是想知道在运行git函数与bash函数或其他函数之间有什么区别。
git mv
会将移动操作暂存,所以你只需要在之后执行git commit
命令即可。如果你手动移动文件,需要在提交之前手动暂存移动操作。移动或重命名文件、目录或符号链接。
...
成功完成后索引会被更新,但是改动仍需被提交。
git add
将更改暂存。 - 1615903补充一点信息,与其他答案不同的是(这仅适用于 giv mv
):
如果文件 <dest>
存在(无论是否被追踪),那么
mv <src> <dest>
会默默地覆盖它,而
git mv <src> <dest>
fatal: destination exists, source=<src>, destination=<dest>
this
和that
都是文件夹,那么mv this that
将会使得that/this
的目录结构产生变化,但是如果that
是一个文件,则会出现错误提示,告诉你mv
无法覆盖它。这个答案仅适用于两个文件的情况。 - Jonatan Öström由于您标记了不同的SCM产品而不仅仅是git
,因此我会以更一般的方式回答这个问题。
每个源代码控制系统都跟踪文件的不同信息。例如,在Mercurial中,移动操作也被跟踪,因此除了重命名文件的删除和添加之外,它还存储有关重命名的信息,以及该文件在重命名之前的名称。
此外,当删除文件时,通常需要将其从SCM中删除(有时也称为“遗忘”)。
因此,一般来说,SCM文件操作命令会更新文件系统以及SCM跟踪此更改所需的操作。
svn
、mercurial
和perforce
标签? - Lucero