如果我想将分支合并到主干上,“svn merge --reintegrate”和 svn merge without reintegrate 有啥区别

Posted

技术标签:

【中文标题】如果我想将分支合并到主干上,“svn merge --reintegrate”和 svn merge without reintegrate 有啥区别【英文标题】:What's the difference between "svn merge --reintegrate" and svn merge without reintegrate if I'd like to merge a branch onto the trunk如果我想将分支合并到主干上,“svn merge --reintegrate”和 svn merge without reintegrate 有什么区别 【发布时间】:2013-08-18 00:51:48 【问题描述】:

在svn book 中,它说merge--reintegrate 是“将所有源URL 的更改合并到工作副本中”。

我想将一个分支合并回主干。 Some places 说“绝对有必要”在合并时调用reintegrate,然后立即调用delete the branch,我认为这很麻烦。 Other places 根本不提重新整合。我有 svn 1.6.11。

所以我现在不知道该怎么办。

【问题讨论】:

【参考方案1】:

升级到svn 1.8,不用再担心了,它会自动弄清楚该怎么做。

来自svn 1.8 release notes:

在合并来自另一个分支的所有符合条件的修订期间,Subversion 1.8 将自动决定合并是否重新集成一个分支。因此,重新集成分支不再需要 --reintegrate 选项才能正确操作。

【讨论】:

合并后是否还需要删除分支(merge --reintegrate)? 如果您关注this little step,则无需在重新集成后删除分支。我不知道为什么 Subversion 不会自动为您执行此操作。【参考方案2】:

同步合并重新整合合并完全不同。前者用于将父分支上所做的所有更改合并到目标分支(通常是功能分支),这些更改尚未合并。后者用于将(特征)分支合并回父分支。基本上这意味着创建(功能)分支的临时克隆,从父分支到临时分支进行同步合并,最后父分支被临时分支替换。换句话说,临时分支包含对(功能)分支和父分支所做的所有更改。

出于某种原因,一些开发人员不了解其中的区别。因此,SVN 开发人员在 SVN 1.8 中删除了选项--reintegrate。在此版本中,该工具会自动检测是否应使用同步合并重新集成合并

如果您使用旧版本,则应使用选项--reintegrate 进行重新集成合并。请注意,如果您记住一些事情,在重新集成后仍然可以使用 (feature) 分支。 SVN 的书很好地解释了这一点:

Reintegrating a Branch Keeping a Reintegrated Branch Alive

【讨论】:

“同步合并”是否只是普通的merge,即没有--reintegratemerge 是的,同步合并是默认设置 - 没有 --reintegrate-c-r

以上是关于如果我想将分支合并到主干上,“svn merge --reintegrate”和 svn merge without reintegrate 有啥区别的主要内容,如果未能解决你的问题,请参考以下文章

SVN 如何把主干上的修改合并到分支上来

svn merge和branch

git合并指定分支的commit到主干上

Tortoise SVN Merge 特定版本

将分支合并到主干

SVN 将主干的代码合并到分支上