在Mercurial中使用两个版本的项目的工作流程

时间:2012-01-16 03:28:14

标签: mercurial workflow dvcs branching-and-merging

我有一个版本为1.0的应用程序。我现在需要开始使用版本2.0,但同时维护和修复版本1.0中的错误。

来自1.0的错误修复程序将合并到2.0版本中,但不会将新功能从2.0反向移植到1.0

我理解分支是如何工作的,但是我需要能够同时处理两个版本,因此在同一工作文件夹中的分支之间切换是不切实际的。我希望能够同时运行这两个版本的代码。

能够同时使用命名分支处理同一应用程序的两个版本的典型设置或工作流程是什么?即在一个文件夹中使用一个分支而在另一个文件夹中使用另一个分支?

我是否只是将存储库克隆到版本2.0的新文件夹中,并将分支设置为2.0版本的分支?

我对Mercurial有点新意,所以请原谅我,如果这听起来有点天真。

1 个答案:

答案 0 :(得分:7)

  

我是否只是将存储库克隆到2.0版的新文件夹中,并将分支设置为2.0版本的分支?

是的,每个主要版本的单独克隆都可以。但是,您应该保留主要开发on the default branch并为每个主要版本使用命名分支。让我来看看工作流程:

完成1.0版后,即可

$ cd ~/src/foo
$ hg tag 1.0
$ hg push http://your-server/foo

然后您可以继续在该克隆版中使用2.0版。当您发现需要修复1.0中的错误时,您可以

$ cd ~/src
$ hg clone http://your-server/foo foo-1.x
$ cd foo-1.x
$ hg update 1.0
$ hg branch 1.x
$ hg commit -m "Starting 1.x branch"
# now fix the bug... left as an exercise to the reader :)
$ hg commit -m "Fixed issue123"
# do QA to test the bugfix, make more commits as necessary
$ hg tag 1.1
$ hg push --new-branch
# make a release

只有在您第一次推送时才需要--new-branch标志。它告诉Mercurial你确实想要在历史中创建一个新的永久分支。

您现在想将错误修复程序引入其他存储库:

$ cd ~/src/foo
$ hg pull http://your-server/foo
$ hg merge 1.x
$ hg commit -m "Merge with 1.1"

对1.x系列使用named branch,您始终可以使用hg update 1.x转到该分支上的最新变更集。将1.x视为“浮动标记”,始终指向该分支上最尖端的变更集。

此工作流程在standard branching wiki page

中有所描述