Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Mercurial中使用项目的两个版本的工作流_Mercurial_Workflow_Dvcs_Branching And Merging - Fatal编程技术网

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

在Mercurial中使用项目的两个版本的工作流,mercurial,workflow,dvcs,branching-and-merging,Mercurial,Workflow,Dvcs,Branching And Merging,我有一个版本为1.0的应用程序。我现在需要开始在版本2.0上工作,但同时维护和修复版本1.0中的错误 来自1.0的错误修复将合并到2.0版本中,但不会将新功能从2.0版本向后移植到1.0版本中 我了解分支如何工作,但是我需要能够同时在两个版本上工作,因此在同一工作文件夹中的分支之间切换是不实际的。我希望能够同时运行两个版本的代码 能够同时使用命名分支在同一应用程序的两个版本上工作的典型设置或工作流是什么?i、 e.处理一个文件夹中的一个分支和另一个文件夹中的另一个分支 我是否只是将存储库克隆到版

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

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

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

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

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

我对Mercurial有点陌生,所以如果这听起来有点幼稚,请原谅我

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

是的,每个主要版本都有一个单独的克隆就可以了。但是,您应该保留主开发,并为每个主要版本使用命名分支。让我浏览一下工作流:

当你的1.0版本完成后,你就可以了

$ cd ~/src/foo
$ hg tag 1.0
$ hg push http://your-server/foo
然后,您可以继续在该克隆中工作,直至版本2.0。当您发现需要修复1.0中的一个bug时,您可以这样做

$ 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系列使用a,您可以始终使用
hg update 1.x
转到该分支上的最新变更集。将
1.x
视为一个“浮动标签”,它始终指向该分支上最尖端的变更集


此工作流在中有描述。

Try:它针对GIT,但适用于Mercurial。这可能有助于解决您的问题,我将完全按照您的建议执行:有两个签出(克隆)版本的代码,一个用于1.0版本,另一个用于2.0.+1版本。可能值得注意的是,在默认的Mercurial中,我认为您需要
hgpush-f
来强制从1.x分支进行推送。。。因为你会推一个新的头,没有“强迫”是不允许的。在单个开发行中,额外的头通常会通过合并来处理,但这不是这里想要的。@icabod:谢谢,我忘记了
--new branch
标志。这是一种更受控制的
-f
形式,可以让你推送新分支而不需要推送多个头部。啊,我以前没有用过
--new branch
,可能是因为我有一个创建匿名分支的讨厌习惯,而
--new branch
似乎不起作用。”这对命名的分支有好处。我以后会用到:)