2011-06-17 53 views
3

我的问题是,按照以下过程进行合并时,是“将分支折叠回主干”过程的最后一步,请执行此操作的正确方法最佳实践方案?需要关于使用分支和合并回主干的帮助/建议

我已经使用svn很多年了。在我个人的项目中,我总是乐于在没有第二思路的情况下快速开始干活,并且以单线性的方式进行版本控制已经接近完美。简单而高效。所有的幸福,,直到我想更多地控制第三方库

今天,我正在进行一个项目,我觉得它已经超越了黑客直接干线的方法。我有多个第三方库,每周更新一次,我真的需要更多的控制权。我需要能够查看第三方lib版本和特定库的跟踪更改之间的特定变更集。我曾经看到过几次代码库变得非常混乱,并且很难用缺乏经验的buildmaster重新回到可行的状态,但我无法在这里出错。

因此,我看着供应商分支,阅读一些文章在这里和那里。我有'Subversion版本控制'这本书,但是我看到的例子在他们的方法中有时是矛盾的,我想说明'分支'的含义。我正要按照approach given on this post by Evan Weaver

我制定了以下程序,我关心的是最后一节“将分支折叠成干线”。似乎我过去一直在使用的buildmasters通常会将分支变更集合到主干上,而我认为分支甚至不会被删除。这是一个合适的方法吗?

创建分公司

1 - 请注意当前的头部修订:

svn info svn://server.com/svn/repository/trunk | grep Revision 

2 - 使后备箱的整洁,远程复制到分支文件夹。命名它。我们叫它your_branch,带有修订版本号替换HEAD_REVISION您在步骤1指出:

svn cp svn://server.com/svn/repository/trunk \ 
svn://server.com/svn/repository/branches/your_branch \ 
-m "Branching from trunk to your_branch at HEAD_REVISION" 

3 - 切换本地结帐指向新的分支(这不会覆盖您的更改):

svn switch --relocate \ 
svn://server.com/svn/repository/trunk \ 
svn://server.com/svn/repository/branches/your_branch 

4 - 检查你的本地结帐,绝对是现在your_branch,并且您可以更新OK:

svn info | grep URL 
svn up 

5 - 如果有必要提交您的新变化。

更新分支

你一直在开发上your_branch一段时间,等有其他人干,现在你必须添加自己的更改your_branch。

1 - 首先,更新您的分支结账并提交任何未完成的更改。

2 - 搜索Subversion日志以查看上次合并的修订版本号(或原始分支的创建时间,如果您从未合并)。这是一次成功的合并关键:

svn log --limit 500 | grep -B 3 your_branch 

3 - 还要注意当前最新修订版:

svn info svn://server.com/svn/repository/trunk | grep Revision 

4 - 合并最后合并版本的主干和差异对行李箱的最新修订版L -

svn merge -r LAST_MERGED_REVISION:HEAD_REVISION \ 
    svn://server.com/svn/repository/trunk . 

5.A:进your_branch工作拷贝,用修订号替换LAST_MERGED_REVISION在步骤2和HEAD_REVISION与修订号指出在步骤3中记ook输出中的错误。可以找到所有文件吗?有没有被删除的东西?也许你做错了。如果需要恢复,运行svn revert -R

5.B - 如果事情似乎5.A OK,检查是否存在冲突,解决任何冲突发现:

svn status | egrep '^C|^.C' 

6 - 提交合并,更换命令与来自步骤4:

svn ci -m "Merged changes from trunk to your_branch: COMMAND"  

折叠分支回主干的确切命令内容

嘿,Y our_branch完成。现在它必须成为后备箱。

1 - 首先,按照上一节(“更新分支”)中的每一步操作,使your_branch与主干上的任何最近更改同步。

2 - 完全删除主干:

svn del svn://server.com/svn/repository/trunk 

3 - 移动your_branch到老树干位置:

svn mv svn://server.com/svn/repository/branches/your_branch \ 
svn://server.com/svn/repository/trunk 

4 - 重新定位你的工作拷贝到主干:

svn switch --relocate \ 
svn://server.com/svn/repository/branches/your_branch \ 
svn://server.com/svn/repository/trunk 

完成!

请对此程序提供任何建议,意见或反馈意见。

回答

1

SVN切换--relocate \ 的svn://server.com/svn/repository/trunk \ 的svn://server.com/svn/repository/branches/your_branch

- -relocate选项是切换到另一个回购。新分支是主干的副本,所以切换。

只要做到:

svn switch ^/branches/your_branch 

SVN信息| grep URL svn up

大多数情况下这个更新什么都不会做。

SVN合并-r LAST_MERGED_REVISION:HEAD_REVISION \ SVN://server.com/svn/repository/trunk。

大部分时间我使用TortoiseSVN,而只是一门心思时间:

svn merge ^/trunk . 

尝试,如果这会工作,它应该。关于合并跟踪,较新的SVN使用merge-info属性,因此大多数时候它应该知道要合并的内容。它有问题你的方法应该很好。

  • ^/是repozitory相对url。
  • SVN信息^ /尝试,如果它是可用在您的SVN版本(你应该在SVN文件夹)

与删除分支部分让我害怕......

尝试:

#注意你的分支应该是最新的(解决分支上的大部分冲突) svn switch ^/trunk svn merge --reintegrate ^/branches/your_branch。

化解矛盾;)

使用svn commit -m “重返your_branch” SVN删除^ /分支机构/ your_branch

大部分是较好的去除这个分支,如果你不知道如何的时候处理它(它不是那么容易,所以更好的是删除它并创建新的)。

此外,请注意更改您在其他分支/主干中更改的名称/重定位文件。这会导致你发生树木冲突。如果其他分支没有变化,请自由选择。

2

如果您还没有这样做,我建议您阅读branching + merging section here

您引用的帖子已过时(2007年8月)并且已过时。从Subversion 1.5(2008年6月)开始,合并跟踪功能已经得到了很大的改进(您可以创建分支并执行合并,而颠覆实际上会跟踪哪些修订已经从主干中合并到您中)。在颠覆1.6(2009年3月)中,这一点已经得到进一步改善。

我特别讨厌建议

2 - 删除主干完全

SVN德尔的svn://服务器。com/svn/repository/trunk

作为管理trunk的一种方式。这看起来似乎有点容易出错(如果两个功能分支想要同时合并,会发生什么情况)。我倾向于分享most recent comment on the post的观点。

相反,您可以在准备好时执行“重新合并”合并以将分支合并回主干。这将您的分支中的相关变更集应用到中继。