对于Mercurial,有2个克隆可以和2个分支一样工作吗?

时间:2010-11-05 05:20:25

标签: mercurial

由于我希望区分自7天或10天以来我所做的所有更改,而没有看到其他团队成员的更改,所以我保留了一个克隆,说

c:\dev\proj1

然后我保留另一个克隆

c:\dev\proj2

所以我可以更改proj1的代码,然后在另一个shell中,从中提取代码,并与其他团队成员合并,然后运行test。然后10天后,我仍然可以通过转到proj1的shell并执行hg diffhg vdiff来区分我和其他人创建的所有代码。

我认为这也可以通过使用分支来完成。这样的2个克隆是否与2个分支完全相同?一个优于其他方法的任何优势?

5 个答案:

答案 0 :(得分:6)

简短的回答是:是的。

当您合并时,Mercurial并不关心更改集的来源。从这个意义上讲,当需要合并更改时,分支和克隆的工作效果会很好。

更好:您描述的工作流程完全 Chapter 3 of the Mercurial book中的策略。

分支机构的唯一优势是它们有一个名称,因此您没有更好的合并权利。如果您希望将这些proj2更改分开,同时仍然从proj1推送它们,请为它们提供真正的分支。再次,在功能上,它们是相同的。

是的,这是DVCS的特征,而不是唯一的Mercurial。

答案 1 :(得分:1)

注意:我对githg更熟悉,但想法应该相同。

如果您更新两个克隆(它们都在编辑同一个分支),差异将变得明显,例如快速修复集成沙箱的错误。

正确的方法是让您拥有一个主题分支(您的第一个克隆),这是您进行开发的地方,另一个是集成(您的第二个克隆)。然后,您可以根据需要将更改从一个合并到另一个。如果您确实对集成分支进行了更改,您将知道它是在那里进行的。

答案 2 :(得分:1)

hg diff -r <startrev> -r <endrev>可用于比较Mercurial历史中的任何两点。

示例历史:

       rev      author  description
       ---      ------  ----------------------
@       6       me      Merge
|\
| o     5       others  More other changes.
| |
| o     4       others  Other changes.
| |
o |     3       me      More of my changes.
| |
o |     2       me      My changes.
|/
o       1       others  More Common Changes
|
o       0       others  Common Changes

如果修订 1 是原始克隆:

  1. Revs 2 3 代表您的更改。
  2. Revs 4 5 是您在分支机构开发期间所做的其他更改。它们会在rev 6 中合并到您的更改中。
  3. 此时,要在合并前仅查看的更改,请运行hg diff -r 1 -r 3以仅显示这些更改。

答案 3 :(得分:0)

为什么不简单地有两个分支? (分支/合并在像Hg或Git这样的DVCS中比在TFS或SVN等集中式VCS中更容易和更安全!)它会更加安全可靠。
这将变得明显,例如当你想要将两个分支/克隆合并在一起时。此外,从两个不同的物理位置编辑一个分支很容易导致混淆和错误。 Hg旨在避免这些情况。

托马斯

答案 4 :(得分:0)

正如一些答案已经指出的那样,分支(命名或匿名)通常比两个克隆更方便,因为你不必拉/推。

但是两个克隆具有完全物理分离的独特优势,因此您可以同时处理两件事情,并且在切换项目时不需要重建。

早些时候我问了一个question关于hg的并发开发,选项1是两个克隆,选项2是两个分支。