2009-05-19 58 views
10

我们有一个包含多个子项目的大型项目。我们即将发布我们的项目,并且一个子项目中的新功能在发布之前不会按原计划完成。我想要做的是将与新功能相关的子项目的所有更改移动到单独的分支中,以继续为下一个版本工作,但我不确定如何最好地完成此操作。颠覆 - 如何将一些变更集从主干移动到分支?

的情况基本上是:

/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保留在主干中。移至分支的更改与保留在主干上的更改之间不存在重叠,并且任何要移至分支的更改均不取决于自上一版本以来的任何其他子项目中的任何更改。

回答

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比我打得一点要停在

+0

变更集少一这样做,但我看不到一种简单的方法,一旦新功能完成后,将它全部合并到主干中。因为我们从树干的头部分叉,然后在树干上恢复了不需要的更改,似乎没有什么好方法可以将这些更改从分支中拉回来,同时更新更新以完成特征C,同时保留对树枝的更改与功能C无关的主干。 – Thomee 2009-06-18 16:08:39

2

这并不回答你的问题,但在未来,你应该开始在不同的分支上开始你的每个子项目。只有当一个子项目完成并准备发货时,它才能合并到主干中。这样,后备箱总是处于可运送状态。

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

至于回答您的实际问题,下面的网址介绍了如何撤消特定版本号:

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

我想你可以分支整个躯干。然后,分公司将拥有所有的子项目(包括您正在运送的项目和尚未准备好的项目)。而且,您可以将上述链接中的技术反复应用到每个要撤消的修订中。听起来这将是乏味和杂乱,但它应该工作。

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 

当我发现在最新的代码(干线)的错误,我把它合并到当前版本分支(例如,分支/ R1),如果需要的话。

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