代码之家  ›  专栏  ›  技术社区  ›  Scott Arrington

使用Mercurial SCM进行分支

  •  7
  • Scott Arrington  · 技术社区  · 15 年前

    所以现在我正在学习RubyonRails,我正在学习《使用Rails的敏捷Web开发》这本书。我还决定让Mercurial尝试一下,因为我已经阅读了分布式SCM的文章,它看起来是一个理想的情况。不过,我还是宁愿把我的代码远程推到我的Linux VPS上,以防我的硬盘驱动器决定跳水。

    所以,我的问题是专门针对mercurial分支的。现在,我已经设置了一个远程存储库,我可以轻松地通过ssh推送更改(我甚至还设置了一个允许我推送的nginx fastcgi站点)。不过,我想做的是,在完成每一章的工作时,为每一章创建分支,这样我就可以有组织地记录我在这本书中所取得的进展。这就是我要做的:

    $ hg branch chapter-10
    (do chapter 10 stuff)
    $ hg commit -m "Chapter 10 complete"
    $ hg update default
    $ hg merge chapter-10
    $ hg commit -m "Merging chapter 10 into default"
    $ hg push
    

    一旦我执行了push语句,我就会从mercurial得到以下消息:

    pushing to ssh://myserver/hg/depot
    searching for changes
    abort: push creates new remote branch 'chapter-10'!
    (did you forget to merge? use push -f to force)
    

    所以在这一点上,我尝试做一个 hg merge 再说一遍,它告诉我没有什么要合并的,这显然是真的,因为我刚刚合并了它。当我使用-f强制推送时,一切看起来都很好,甚至Web界面也显示了适当的分支。

    总而言之,我的问题很简单:我这样做是正确的吗?对于Mercurial,是否有更合适的方法(即“Mercurial方法”)?老实说,我只希望存储库作为备份。我是分布式SCM模型的粉丝,但对我来说,强制推的感觉有点“肮脏”。任何见解都非常感谢!事先谢谢。

    3 回复  |  直到 7 年前
        1
  •  6
  •   Vadim Kotov First Zero    7 年前

    这个 push -f 是您的案例的正确选择,上个月有一个讨论要添加该命令 push creates new remote branch “警告弹出:请参见 issue 1513 .

    然而, issue 1974 (本月)提到了一些不良影响(但在你的案例中没有)。
    看到这个 translated article 了解有关在远程回购上创建第二个头的更多信息。


    在更一般的一点上,如果要并行编写章节,并且只想在某个(稳定的)时间点合并它们,则可以使用分支。

    但是,如果您的写作过程更为线性,那么您只能使用一个分支,并在此过程中放置一些标签。
    然而,如果你回到第10章,添加一些行,即使你已经放置了标签11和12,这将使历史更难阅读。所以在这种情况下,分支仍然是一个好主意。

        2
  •  4
  •   Jiri Klouda    15 年前

    我不知道您的具体问题,但从您的评论来看,您似乎使用了可能希望使用标签的分支。

    当多个人在同一个项目上合作时,通常使用分支,您希望创建一个工作分离,这样一个人就可以处理一段稳定的代码,而另一个人则做一些实验性的工作,暂时中断功能。或者,分支用于稳定发布,而开发则在主干中进行。

    标记(或标签)主要用于创建一个标记,表示代码版本的某些重要性。例如,如果您想标记第10章的完成,您只需用“第10章”标记标记所有当前版本。不需要分支。如果出于某种原因有必要,您可以在将来的任何时候从标记的版本进行分支。

        3
  •  2
  •   Ringding    15 年前

    在这种情况下,我觉得使用-f进行推送完全可以。它只是创建新的分支,而不是头。创建远程头完全是另一回事。