合并主干和分支的Svn操作

11

我有一个大项目。

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

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

最终,我需要将所有更改合并回主干并从中制作新标签。

所以我需要版本1的错误修复,版本2的新分支,当然还要合并版本2的错误修复。

我正在使用svn,但svn一直存在问题。 我无法合并任何东西而不会产生冲突。

有人能给我建议吗?

问候

4个回答

6
创建一个分支,旨在为旧版本提供错误修复,称为发布分支。您应该在主干上开发错误修复(因为它们需要在所有新版本中使用,对吗?)。从那里,您将它们合并回仍受支持的版本。这意味着当版本1不再受支持时,您停止将错误修复合并回到它。有关更多信息,请参见文档
如果无法将主干中的错误修复合并到分支中,则解决方案是创建“后移分支”。在此处,您可以部分地从主干中合并修复,如果代码太不同,则部分重写相同的修复。还建议记录您通常执行以解决问题的合并,因此合并跟踪可帮助您查看问题是否已解决。
如果您正在修复 /branches/1.2.x,Subversion 项目使用的命名约定是创建一个称为 1.2.x-r[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

在重新集成分支之后,应该删除该分支。


0

在将主干的更改合并到分支后,我发现最好使用2-URL合并将分支合并回主干。据我所知,--reintegrate只是2-URL合并的简化语法,有时会失败(尽管我上次使用重新集成是在1.5版本中)。

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/


0

首先,我建议您查看 SVN文档,如@SanderRijken所建议的那样,了解功能和发布分支。

但从您的问题听起来,我认为您的主要问题是另一个。也就是说,根本没有合并“有效”(即所有合并都会产生冲突,而您不希望出现这种情况)。因此,也许您可以详细说明您正在做什么确切地(例如,发布用于合并的命令)?


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

1
我已经尝试过这个了,但问题仍然存在。 我们再次为错误修复创建了一个分支,并为新功能创建了一个主干。 将发布1的错误修复合并到版本2的主干中会导致许多冲突。 SVN无法在没有冲突的情况下合并单个文件。手动解决冲突可能会带来很多问题和浪费时间。使用reintegrate进行合并也没有帮助!我想知道其他公司是如何解决这个问题的 - 错误修复、新版本以及合并这两者? 似乎SVN对于这种工作不太适用。 - Darko Petreski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接