hg克隆是否等同于hg(init→pull)

时间:2011-08-04 16:22:12

标签: mercurial

在工作中,我正在使用7个人共享的svn存储库。

为了避免因提交而破坏我的错误并打破每个人的构建并避免在svn中进行分支,我在hg目录的一部分创建了一个svn存储库我正在努力。

我在工作时对hg执行本地提交,因为我在虚拟机上进行了所有设置,我甚至将我的hg存储库推送到私有的集中位置。

最近我迁移到Mac OS X lion这会破坏我的虚拟机,所以我不得不重新设置它。所以我从我的svn trunk检查了项目,现在想要在我正在处理的目录中找回hg更改集。

我有两个选择:

  • $ hg clone <remote repo>
  • $ hg init && hg pull <remote repo>

这是等价的吗?

2 个答案:

答案 0 :(得分:14)

唯一的区别是,如果你运行hg init && hg pull <remote>,那么你还必须:

  1. 运行hg update default以结帐工作副本
  2. 手动设置pushpull
  3. 的默认路径

    hg clone在一个命令中完成所有这些。

答案 1 :(得分:4)

嗯,是的,没有。

我知道你的问题表明你正在使用远程存储库作为源,但问题的标题有点宽泛,所以我正在回答更广泛的问题。

看似明显的最终结果是一样的。虽然两个存储库中的文件不是二进制相同的(请注意,我不是在谈论您跟踪的文件,我在谈论Mercurial用于跟踪这些文件的“数据库”),历史,变更集等。都是一样的。

所以在这方面,是的,那两个人似乎做了同样的事情。

然而,他们以不同的方式做到这一点。

如果你这样做:

hg clone REMOTE_URL
hg init && hg pull REMOTE_URL

然后没有真正的区别。

但是,如果你这样做:

hg clone LOCAL_PATH
hg init && hg pull LOCAL_PATH

(请注意,此克隆/ pull来自磁盘上已有的另一个存储库)

然后可能有区别。如果可能,本地克隆将使用存储库的硬链接。换句话说,您没有为存储库中的所有文件创建新的不同副本,而是在磁盘上为它们创建新链接,这些链接运行速度更快,几乎不需要空间。

然后,当你开始修改历史时,即。提交新的变更集,这些文件在按需的基础上取消链接并制作完整副本。

请注意,我不了解它所执行的文件的确切启发式方法,也不知道这些文件的硬链接。您可以在Mercurial wiki中了解有关此功能的更多信息,Hardlinked Clones

拉不会这样做。它将从其他存储库读取并在目标存储库中创建/更新新文件。这需要更多的时间和更多的磁盘空间。

总结一下:

  • hg clone LOCAL_PATH可以使用更少的磁盘空间并比hg init && hg pull LOCAL_PATH
  • 运行得更快
  • 如果您是从远程存储库克隆/拉取,则没有真正的区别