Svn 需要关于使用分支和合并回主干的帮助/建议吗

Svn 需要关于使用分支和合并回主干的帮助/建议吗,svn,version-control,merge,branch,vendor-branch,Svn,Version Control,Merge,Branch,Vendor Branch,我的问题是,当按照下面的过程进行合并时,在最佳实践场景中,“将分支折叠回主干”过程的最后一步是否是正确的方法 我已经使用svn很多年了。在我的个人项目中,我总是毫不犹豫地愉快地在主干上进行黑客攻击,并且在很长一段时间内,以单线线性方式进行版本控制已经接近完美。简单高效。一切都是幸福的,直到有一天我想对第三方图书馆拥有更多的控制权 今天,我在做一个项目,我觉得它已经超越了直接从主干开始的方法。我有多个第三方库,有些库每周都会更改,我真的需要更多的控制。我需要能够查看第三方库版本之间的特定变更集,并

我的问题是,当按照下面的过程进行合并时,在最佳实践场景中,“将分支折叠回主干”过程的最后一步是否是正确的方法

我已经使用svn很多年了。在我的个人项目中,我总是毫不犹豫地愉快地在主干上进行黑客攻击,并且在很长一段时间内,以单线线性方式进行版本控制已经接近完美。简单高效。一切都是幸福的,直到有一天我想对第三方图书馆拥有更多的控制权

今天,我在做一个项目,我觉得它已经超越了直接从主干开始的方法。我有多个第三方库,有些库每周都会更改,我真的需要更多的控制。我需要能够查看第三方库版本之间的特定变更集,并跟踪我对特定库所做的更改。我已经见过几次代码库变得非常混乱,很难用没有经验的buildmaster恢复到可用状态,我不能在这里花时间出错

因此,我研究了供应商分支,到处阅读了一些文章。我有一本很棒的《Subversion版本控制》的书,但是我看到的例子在方法上有时是矛盾的,我想解释一下“分支”的含义。我正要跟在后面

我在下面列出了程序,我关心的是最后一节“把树枝折成树干”。看起来我过去使用过的构建大师通常会将分支变更集“合并”到主干上,我甚至不认为分支被删除了。这是正确的做法吗

创建分支

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

    svn info svn://server.com/svn/repository/trunk | grep Revision
svn info svn://server.com/svn/repository/trunk | grep Revision
2-将主干的干净远程副本复制到Branchs文件夹中。随便说说。我们将其称为您的分支机构,用您在步骤1中记录的修订号替换HEAD_修订版:

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-切换本地签出以指向新分支(这不会覆盖您的更改):

4-检查您的本地签出现在确实是您的分支机构,并且您可以更新ok:

svn info | grep URL
svn up
5-如有必要,提交您的新更改

更新分支机构

您已经在您的_分支上开发了一段时间,trunk上的其他人也在开发,现在您必须将他们的更改添加到您的_分支中

1-首先,更新分支签出并提交任何未完成的更改

2-搜索Subversion日志,查看您上次合并更改的修订号(或者原始分支是在什么时候进行的,如果您从未合并)。这对于成功进行合并至关重要:

svn log --limit 500 | grep -B 3 your_branch
3-同时注意当前的头部修订:

    svn info svn://server.com/svn/repository/trunk | grep Revision
svn info svn://server.com/svn/repository/trunk | grep Revision
4-将主干上最后一次合并修订和主干上的head修订的差异合并到your_branch工作副本中,用第2步中注明的修订号替换最后一次合并修订,用第3步中注明的修订号替换head_修订:

  svn merge -r LAST_MERGED_REVISION:HEAD_REVISION \
  svn://server.com/svn/repository/trunk .
5.a-查找输出中的错误。能找到所有文件吗?是否删除了不应该删除的内容?也许你做错了。如果需要恢复,请运行svn
revert-R

5.b-如果5.a中的情况看起来不错,检查冲突,解决发现的任何冲突:

svn status | egrep '^C|^.C'
6-提交合并,将命令替换为步骤4中的确切命令内容:

svn ci -m "Merged changes from trunk to your_branch: COMMAND"       
将树枝折回树干

嘿,你的分支机构完成了。现在它必须变成树干

1-首先,按照上一节(“更新分支”)中的每个步骤进行操作,以便您的分支与主干上最近的任何更改保持同步

2-完全删除主干:

svn del svn://server.com/svn/repository/trunk
3-将您的_分支移动到旧主干位置:

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 
完成了


非常感谢您对本程序的任何建议、意见或反馈。

如果您还没有这样做,我建议您阅读

你提到的帖子很旧(2007年8月),已经过时了。从subversion 1.5(2008年6月)开始,合并跟踪有了很大的改进(您可以创建分支并执行合并,而subversion实际上可以跟踪主干中已经合并的修订)。这在subversion 1.6(2009年3月)中得到了进一步改进

我特别不喜欢这个建议

2-完全删除主干

斯文德尔酒店svn://server.com/svn/repository/trunk

作为管理主干的一种方式。这充其量似乎有点容易出错(如果两个功能分支希望同时合并回来会发生什么情况)。我倾向于同意这个观点

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

svn开关-重新定位\ svn://server.com/svn/repository/trunk \ svn://server.com/svn/repository/branches/your_branch

--重新定位选项是切换到另一个回购协议。新分支是trunk so do交换机的副本

只要做:

svn switch ^/branches/your_branch
svn信息| grep URL svn向上

大多数情况下,此更新不会起任何作用

svn合并-r上次合并的修订:标题修订\ svn://server.com/svn/repository/trunk

大多数情况下,我使用龟甲,但仅尝试:

 svn merge ^/trunk .
试试看,如果这行得通的话,应该是这样的。关于合并跟踪,较新的SVN使用“合并信息”属性,因此大多数时候它应该知道要合并什么。如果有问题,你的方法应该很有效

  • ^/是对应的url
  • svn info^/尝试是否在您的svn版本中可用(您应该在svn文件夹中)
删除分支让我害怕

尝试:

#请注意,您的分支应该是最新的(在分支早期解决大多数冲突) svn交换机^/中继 svn合并--重新整合^/branchs/your_分支

解决冲突;)

svn提交-m“重新整合您的分支”