在Mercurial源代码控制存储库中,'pull'是'clone'的同义词吗?

ten*_*ent 6 version-control mercurial clone dvcs pull

我看到命令'拉'并想知道这与'克隆'有什么不同.这两个术语似乎暗示从某个远程存储库中检索代码.这里有一些微妙的区别吗?

Mar*_*ler 19

需要基于另一个创建新存储库时使用clone.稍后使用pull将新的更改集传输到克隆中.你无法使用clone来获取最新的变更集 - 这就是拉动的目的.pull命令将比较两个存储库,在存储库中找到缺少的变更集,最后传输它们.

但是,你是对的,克隆和拉取之间有相似之处:它们都在存储库之间传递历史.如果您先克隆

hg clone https://www.mercurial-scm.org/repo/hg/
Run Code Online (Sandbox Code Playgroud)

那么这与做的完全相同

hg init hg
cd hg
hg pull https://www.mercurial-scm.org/repo/hg/
hg update
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,您都可以获得完全相同的历 但是,clone命令更方便,因为它还编辑了.hg/hgrc文件以供您设置默认路径:

[paths]
default = https://www.mercurial-scm.org/repo/hg/
Run Code Online (Sandbox Code Playgroud)

这使您hg pull无需指定URL即可在存储库中执行此操作.使用克隆的另一个好处是当您在同一磁盘上使用存储库时:hg clone a b在磁盘空间方面将非常快速且便宜,因为b它将共享历史记录a.这是使用硬链接完成的,适用于所有平台(Windows,Linux,Mac).


las*_*ock 11

hg clone是如何制作远程存储库的本地副本的.Subversion的等价物是svn checkout.

hg pull从另一个存储库中提取更改. hg update将这些更改应用于本地存储库. hg pull -u相当于hg pull; hg update.颠覆相当于hg pull -usvn update.