现在我正在学习 Ruby on Rails,并且正在阅读《Agile Web Development with Rails》一书。我还决定尝试一下 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
执行推送语句后,我会从 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
,它告诉我没有任何内容可以 merge ,这显然是正确的,因为我刚刚 merge 了它。当我用 -f 强制推送时,一切看起来都很好,甚至 Web 界面也显示了适当的分支。
总而言之,我的问题很简单:我这样做的方法正确吗?是否有更合适的方式来使用 Mercurial 来做到这一点(即“Mercurial 方式”)?老实说,我只是希望存储库作为备份。我是分布式 SCM 模型的粉丝,但对我来说,强制推送感觉有点“肮脏”。任何见解都将不胜感激!提前致谢。
最佳答案
push -f
是适合您情况的正确选项,上个月有一次讨论,当此“push 创建新的远程分支
”警告时添加该命令弹出:参见issue 1513 .
但是,issue 1974 (本月)提到了一些不良影响(但不是你的情况)。
看这个translated article了解有关在远程存储库上创建第二个头的更多信息。
更一般地说,如果您并行编写章节,并且只想在某个(稳定)时间点 merge 它们,则可以使用分支
但是如果你的写作过程更加线性,你可以只使用一个分支,并沿途放置一些标签。
然而,如果您返回第 10 章并添加一些行,即使您已经放置了标签 11 和 12,这也会使历史记录变得更难阅读。所以在这种情况下分支仍然是一个好主意。
关于mercurial - 使用 Mercurial SCM 进行分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2099432/