Subversion - 如何将一些变更集从主干移动到分支?

时间:2009-05-19 16:40:11

标签: svn

我们有一个包含多个子项目的大型项目。我们正在接近我们项目的发布,并且一个子项目中的新功能将不会像原计划那样在发布之前完成。我想做的是将与新功能相关的子项目的所有更改移动到一个单独的分支中,以继续为下一个版本工作,但我不确定如何最好地完成此任务。

情况基本上是:

/proj/trunk/A/
/proj/trunk/B/
/proj/trunk/C/

自上次发布以来,我们已修复了a..z。修订版d,f,g和j..n包含与C中的新特征相关的工作,该特征不会及时完成。修订版e,h和q包含C中无关的更改,这些更改需要在此版本中。我想创建一个/proj/branches/new-feature-for-C/并在那里移动更改d,f,g和j..n,同时在主干中保持e,h和q。移动到分支的更改与要保留在主干上的更改之间没有重叠,并且要移动到分支的更改都不会取决于自上一版本以来任何其他子项目中的任何更改。

3 个答案:

答案 0 :(得分:10)

我就是这样做的:将主干复制到分支,然后反向合并变更集。

所以如果主干位于http://svnserver/svn/myrepo/trunk/C 并且不需要的更改集为3, 6 , 9-11

svn copy http://svnserver/svn/myrepo/trunk/C http://svnserver/svn/myrepo/branch/C -m "Branch no completable work"
svn merge -c -3,-6 http://svnserver/svn/myrepo/trunk/C <filepath to root of trunk>
svn merge -r 11:8 http://svnserver/svn/myrepo/trunk/C <filepath to root of trunk>
****CHECK EVERY THING WORKED***
svn commit . -m "Removed some changes that weren't to be finished"

请注意,-r 11:8比您想要停止的变更集

少一个

答案 1 :(得分:2)

这不能解答您的问题,但将来您应该开始在不同的分支上开发每个子项目。只有当子项目完成并准备发运时,它才会合并到主干中。这样,行李箱总是处于可运输的状态。

唯一的挑战是两个不同的子项目是否需要共享一些相同的新代码。 Subversion使这种情况具有挑战性,但其他版本控制系统(如Git,Mercurial和Bazaar)使这种情况变得容易。

就回答您的实际问题而言,以下网址说明了如何撤消特定修订号:

http://svnbook.red-bean.com/en/1.5/svn-book.html#svn.branchmerge.basicmerging.undo

我猜你可以分支你的整个行李箱。然后,分支机构将拥有所有子项目(包括您正在运送的项目和尚未准备好的项目)。并且,您可以将上述链接中的技术反复应用于要撤消的每个修订的主干。听起来它会很乏味和混乱,但它应该有效。

答案 2 :(得分:0)

设置回购的方法有很多种,但我通常这样做是为了这个。

trunk - always tracks the latest code in development that will definitely get released
branches/R1 - when I do a release, I create a branch for it, and also a tag (see below R1.0). This branch always tracks the latest version of Release 1.x. If I need to go back, I use the tags, below.
branches/Import Tool - when I am working on a standalone feature that may not get released with latest code (e.g., main product is a calendar, import tool may not be ready in time).
tags/R1.0
tags/R1.1 - every time I release an update to a release, I create a tag, so that I can easily revert to that version e.g., if I need to reproduce a bug
tags/R1.2

当我在最新代码(主干)中发现错误时,如果需要,我会将其合并回当前版本分支(例如,branches / R1)。

您不希望创建太多分支,因为它会导致从主干合并更多的工作,因此请尽可能减少分支数。