mercurial - 使用 Mercurial SCM 进行分支

标签 mercurial version-control branch

现在我正在学习 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/

相关文章:

git - 'Git push -u' 记住参数多久?

version-control - 使用 “feature branches” 与重构兼容吗?

php - 从 Composer 创建项目 - Mercurial

version-control - 在 hg repos 之间以托管方式共享文件

svn - Mercurial 和 Subversion : changing, 提交、从 SVN 拉取、推送, "Sorry, can' t 找到 merge 修订版的 svn 父级。”

powershell - 为什么 Mercurial 忽略我在 Powershell 中提供的 repo 路径?

svn - SVN 分支模型 : branch -> next-branch, 放弃主干有什么缺点吗?

javascript - 使用 Angular Observable 满足异步分支和同步分支

git - 在 Git 分支名称中使用斜杠字符

mercurial - 我可以更改 Mercurial 变更集上的用户名吗?