使用Mercurial SCM进行分支

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Mercurial SCM进行分支相关的知识,希望对你有一定的参考价值。

所以现在我正在学习Ruby on Rails,我正在阅读“使用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模型的粉丝,但对我来说,强迫推动感觉有点“脏”。非常感谢任何见解!提前致谢。

答案

push -f是你的情况的正确选择,上个月有一个讨论,当这个“push creates new remote branch”警告弹出时添加该命令:请参阅issue 1513

然而,issue 1974(本月)提到了一些不良影响(虽然不是你的情况)。 请参阅此translated article以了解有关在远程仓库上创建第二个头的更多信息。


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

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

另一答案

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

分支通常在多个人在同一个项目上合作时使用,并且您希望创建工作分离,这样一个人可以处理稳定的代码,而另一个人会做一些临时破坏功能的实验。或者,分支用于稳定释放,而发展在干线中进行。

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

另一答案

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

以上是关于使用Mercurial SCM进行分支的主要内容,如果未能解决你的问题,请参考以下文章

是否可以使用bazaar,mercurial或git进行部分克隆/分支?

[SCM]源码管理 - mercurial

SCM-MANAGER

使用 Maven/Hudson/Mercurial 进行发布

Mercurial 分支与编译标志:一个代码库——多个产品

使用mercurial生成合并日志