使用Mercurial SCM进行分支

时间:2010-01-20 06:25:38

标签: mercurial version-control branch

所以现在我正在学习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强制推送时,一切看起来都很好,甚至网页界面都显示了相应的分支。

总结一下,我的问题很简单:我这样做是正确的吗?有没有更合适的方法来使用Mercurial(即“Mercurial方式”)?老实说,我只是希望存储库充当备份。我是分布式SCM模型的粉丝,但对我来说,强迫推动感觉有点“脏”。非常感谢任何见解!提前谢谢。

3 个答案:

答案 0 :(得分:6)

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

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


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

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

答案 1 :(得分:4)

我不知道您的具体问题,但是根据您的意见,您似乎使用了您可能想要使用标记的分支。

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

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

答案 2 :(得分:2)

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