use*_*843 4 mercurial merge-tracking svn-merge
svnmerge有助于阻止特定分支的某些更改集.如何通过Mercurial实现这一目标?
什么subversion调用合并与Mercurial中的合并有很大不同.svnmerge或do的操作svn merge
通常在其他版本控制系统中称为"樱桃选择".基本上它会创建一个新提交,它是目标分支中原始变更集的副本.在Mercurial中,可以使用移植扩展来完成.
与常规合并相比,这种方法在DVCS中不太流行,因为它创建了多个头部,这些头部难以维护.以下是如何使用它以及结果输出的样子:
$ hg checkout -r 8
$ hg branch release
$ hg transplant 10
applying 8ba2867cf974
8ba2867cf974 transplanted to 1f5920f61c94
7---8---9---A [default]
\
B [release]
Run Code Online (Sandbox Code Playgroud)
在这里你有你的提交A来修复trunk上的bug并hg transplant
释放它,创建一个新的提交B,它包含与A相同的更改,但具有不同的父项.
的另一种方法是不使用移植和修复只在发布分支检查.您将创建一个新的发布分支并在那里进行修复,然后您将发布分支合并为默认值.这看起来像这样:
$ hg checkout -r 8
$ hg branch release
... fix fix fix ...
$ hg commit -m"Make fix A"
$ hg checkout -r 9
$ hg merge release
1 files updated, 1 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ hg commit -m"Merged release branch"
7---8---9---B- [default]
\ /
A---- [release]
Run Code Online (Sandbox Code Playgroud)
这里B是合并提交.它没有与之关联的"额外"更改(除非存在已解决的冲突),并且具有将发布分支标记为在该点合并为默认值的特殊属性.只有一个实际的变更集可以修复错误 - 标记为"A"的错误 - 当然,更改本身也在默认分支中.
这种方法的优点是:
通常,您可以在适当的位置标记发布分支"v1.1"或其他任何内容,以便了解该发行版的来源.
这种方法的缺点是:
你可以用第一个问题做很多事情 - 如果你必须维护一个非常老的分支,那么你最终会得到不同的分支.无论如何,补丁可能非常不同.
第二个问题是,例如,如果您对发布版本有一个"紧急"补丁,可以发布或解决错误,但需要更大的默认修复来解决潜在问题.在这种情况下,您必须合并发布,然后创建一个新的显式提交以"撤消"您不想要的提交.
这种做法svn merge
在某种程度上实际上具有类似的优点.如果有选择地将更改从trunk更改为release,则必须记住合并的修订(假设您没有合并所有trunk).svn merge
设置svn:mergeinfo属性,但跟踪这些属性可能会导致问题,而且你必须仔细检查日志,说"哦,是的,我确实将该修复合并到了发布中".
如果您在修复时将整个版本分支合并到主干,则无需记住已合并的修订版本.
归档时间: |
|
查看次数: |
438 次 |
最近记录: |