我有一个巨大的项目。
我需要创建一个分支 - 这将是项目的第 2 版,但我还需要保留主干并将其与分支 1 并行更改,作为对第 1 版的错误修复。
我需要将错误修复从主干合并到分支 1,同时向分支添加新功能。
最后,我需要将所有更改合并回主干并从中制作新标签。
所以我需要版本 1 的错误修复,版本 2 的新分支,当然还有合并版本 2 中的错误修复。
我正在使用 svn,但 svn 总是出问题。我不能在没有冲突的情况下合并任何东西。
有人可以给我一个建议该怎么做吗?
问候
为旧版本提供错误修复而创建分支称为发布分支。您应该在主干上开发错误修复(因为它们需要进入所有新版本,对吗?)。从那里您将它们合并回仍然受支持的版本。这意味着当版本 1 不再受支持时,您将停止将错误修复合并回它。有关更多信息,请参阅文档。
如果无法将主干中的错误修复合并到分支,则解决方案是创建一个“反向移植分支”。在这里,您可以部分合并来自主干的修复,如果代码差异太大,则部分重写相同的修复。还建议记录您通常为解决问题而执行的合并,因此合并跟踪可帮助您查看问题是否已解决。
如果你正在修复 /branches/1.2.x,Subversion 项目使用的命名约定是创建一个名为 1.2.xr[REVNUM] 的反向移植分支,其中 REVNUM 表示你正在反向移植的修订版,或 1.2.x-issue[ ISSUENUM],其中 ISSUENUM 表示您要解决的问题。
当您完成创建反向移植修复后,您可以将其合并到版本中
svn checkout .../branches/1.2.x myproduct-1.2.x
svn merge --reintegrate .../branches/1.2.x-r123 myproduct-1.2.x
重新整合分支后,应该删除分支。
将主干中的更改合并到分支后,我发现最好使用 2-URL 合并将分支合并回主干。据我了解--reintegrate它只是 2-URL 合并的一种更简单的语法,有时会失败(尽管我最后一次使用 reintegrate 是在 1.5 版中)。
svn merge url://trunk@mergedRev url://branch@HEAD .
mergeRev 是您上次将主干合并到分支时的修订版本。
如果您使用简单的合并指令,您从主干合并到分支的所有更改都将被视为需要在合并时添加到主干的更改。2-URL 合并中的第一个 url 告诉 svn 哪些更改来自主干。这应该大大减少合并期间的冲突。
至于您的存储库的结构,我可以建议来自 ariejan.net 的博客条目(见下文,因为我只允许在我的帖子中使用一个链接)
博客条目:ariejan.net/2006/11/24/svn-how-to-structure-your-repository/
您应该首先为您的版本 1 创建一个“标签”,这是您产品的发布版本。项目的第 2 版将是主干的延续,而不是第 2 版的分支。您需要创建分支的唯一原因是对(已发布的)版本 1 进行错误修复。您为新版本所做的一切都将在主干上完成,除非您有理由不这样做。
首先,我建议您按照@SanderRijken 的建议查看SVN 文档,看看功能和发布分支是什么。
但是根据您的问题,我认为您的主要问题是另一个问题。也就是说,根本没有合并是“有效的”(即,所有的冲突都会在你不期望的地方出现)。所以也许你可以详细说明你在做什么(比如发布你用于合并的命令)?