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

时间:2009-09-09 05:13:24

标签: version-control mercurial clone dvcs pull

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

3 个答案:

答案 0 :(得分:19)

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

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

hg clone https://www.mercurial-scm.org/repo/hg/

然后这与做

的效果完全相同
hg init hg
cd hg
hg pull https://www.mercurial-scm.org/repo/hg/
hg update

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

[paths]
default = https://www.mercurial-scm.org/repo/hg/

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

答案 1 :(得分:11)

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

hg pull从另一个存储库中提取更改。 hg update将这些更改应用于本地存储库。 hg pull -u相当于hg pull; hg update。相当于hg pull -u的Subversion是svn update

答案 2 :(得分:2)

clone 创建一个新存储库作为现有存储库的副本。

将所有变更集(尚未存在)从另一个存储库导入现有存储库