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

Kev*_*Kev 5 workflow mercurial dvcs branching-and-merging

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

从Bug修复1.0将被合并到了2.0释放,但没有新的功能,将从被反向移植2.01.0释放.

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

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

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

我对Mercurial有点新意,所以请原谅我,如果这听起来有点幼稚.

Mar*_*ler 7

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

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

完成1.0版后,就可以了

$ cd ~/src/foo
$ hg tag 1.0
$ hg push http://your-server/foo
Run Code Online (Sandbox Code Playgroud)

然后,您可以继续在该克隆版中使用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
Run Code Online (Sandbox Code Playgroud)

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

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

$ cd ~/src/foo
$ hg pull http://your-server/foo
$ hg merge 1.x
$ hg commit -m "Merge with 1.1"
Run Code Online (Sandbox Code Playgroud)

通过为1.x系列使用命名分支,您始终可以使用hg update 1.x转到该分支上的最新变更集.可以将其1.x视为一个"浮动标记",它总是指向该分支上最尖端的变更集.

此工作流程在标准分支Wiki页面中进行了描述.