在工作中,我正在使用7个人共享的svn
存储库。
为了避免因提交而破坏我的错误并打破每个人的构建并避免在svn
中进行分支,我在hg
目录的一部分创建了一个svn
存储库我正在努力。
我在工作时对hg执行本地提交,因为我在虚拟机上进行了所有设置,我甚至将我的hg
存储库推送到私有的集中位置。
最近我迁移到Mac OS X lion
这会破坏我的虚拟机,所以我不得不重新设置它。所以我从我的svn trunk
检查了项目,现在想要在我正在处理的目录中找回hg更改集。
我有两个选择:
$ hg clone <remote repo>
$ hg init && hg pull <remote repo>
这是等价的吗?
答案 0 :(得分:14)
唯一的区别是,如果你运行hg init && hg pull <remote>
,那么你还必须:
hg update default
以结帐工作副本push
和pull
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