Svn合并树干和树枝

时间:2010-03-09 15:40:35

标签: svn merge branch trunk

我有一个庞大的项目。

我需要创建一个分支 - 这将是项目的第2版,但我还需要保留主干并将其与分支1并行更改,以修复版本1的错误。

我需要将主干中的错误修复程序合并到分支1,同时向分支添加新功能。

最后,我需要将所有更改合并到主干中并从中创建新标记。

所以我需要修复版本1的bug,修改版本2的新版本,当然还要修复版本2中的错误修复。

我正在使用svn,但svn一直都会出问题。没有冲突我就无法合并。

有人可以给我一些建议吗?

此致

4 个答案:

答案 0 :(得分:6)

为了向旧版本提供错误修正而创建分支称为release branch。您应该在trunk上开发错误修复程序(因为它们需要适用于所有新版本吗?)。从那里,您将它们合并回仍然支持的版本。这意味着当不再支持版本1时,您将停止将错误修复程序合并回它。有关详细信息,请参阅documentation

如果trunk中的错误修复无法合并到分支,则解决方案是创建“backport分支”。在这里你要么部分地合并修复程序,如果代码太不同,则部分重写相同的修复程序。它还建议记录您通常会执行的合并来解决问题,因此合并跟踪可以帮助您查看是否修复了问题。

如果您正在修复/branches/1.2.x,Subversion项目使用的命名约定是创建一个名为1.2.xr [REVNUM]的后端分支,其中REVNUM表示您要向后移植的修订版,或1.2.x -issue [ISSUENUM],其中ISSUENUM表示您正在修复的问题。

创建完backport修补程序后,可以使用

将其合并到发行版中
svn checkout .../branches/1.2.x myproduct-1.2.x
svn merge --reintegrate .../branches/1.2.x-r123 myproduct-1.2.x

重新整合分支后,应删除分支。

答案 1 :(得分:0)

您应该首先为您的版本1创建一个“标记”,这是您产品的发布版本。然后,项目的第2版将是主干的延续,而不是版本2分支。你需要创建一个分支的唯一原因是对(版本)版本1进行错误修复。你为新版本做的一切都将在主干上完成,除非你有理由不这样做。

答案 2 :(得分:0)

首先,我建议您按照@SanderRijken的建议查看SVN documentation,看看有哪些功能和发布分支。

但是根据你的问题,我认为你的主要问题是另一个问题。也就是说,根本没有合并是“正常”(即所有的冲突都是你不希望的)。所以也许你可以详细说明你正在做什么完全(比如发布用于合并的命令)?

答案 3 :(得分:0)

将更改从主干合并到分支后,我发现最好使用2-URL合并将分支合并回主干。据我所知 - reintegrate ,它只是一个更简单的2-URL合并语法,有时fails(虽然我上次在1.5版中使用了reintegrate)。

svn merge url://trunk@mergedRev url://branch@HEAD .

当您最后一次将主干合并到分支中时,mergedRev是修订版。

如果您使用简单的合并指令,那么您从主干合并到分支的所有更改都将被视为已更改,需要在合并时添加到主干。 2-URL合并中的第一个url告诉svn哪些更改来自主干。这应该会大大减少合并期间的冲突。

至于您的存储库的结构,我可以建议一个博客条目(见下文,因为我只允许在我的帖子中使用一个链接)来自ariejan.net

博客文章:ariejan.net/2006/11/24/svn-how-to-structure-your-repository /

相关问题