我的问题是,在按照以下程序合并时,在最佳实践方案中,“将分支折叠回主干”程序的最后一步是否是正确的方法?
我已经使用 svn 很多年了。在我的个人项目中,我总是很高兴地在trunk 上破解,并且在很长一段时间内以单行线性方式进行版本控制已经接近完美。简单高效。一切都很幸福,直到有一天我想要更多地控制 3rd 方库。
今天,我在一个项目中,我觉得已经超越了从树干直接破解的方法。我有多个 3rd 方库,其中一些每周都会更改,我确实需要对其中的内容进行更多控制。我需要能够查看 3rd 方库版本之间的特定变更集并跟踪我对特定库所做的更改。我见过几次代码库变得非常混乱,并且很难在没有经验的 buildmaster 的情况下恢复可用状态,我不能在时间上明智地在这里出错。
所以我研究了供应商分支,在这里和那里阅读了几篇文章。我有一本很棒的“带有 Subversion 的版本控制”一书,但我看到的例子有时在他们的方法上是矛盾的,我想理解“分支”。我正要遵循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,并且您可以更新确定:
svn info | grep URL
svn up
5 - 如有必要,提交您的新更改。
更新分支
你已经在 your_branch 上开发了一段时间,其他人也在 trunk 上,现在你必须将他们的更改添加到 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 - 将主干上的最后一个合并版本和主干上的头版本的差异合并到 your_branch 工作副本中,将 LAST_MERGED_REVISION 替换为步骤 2 中记录的修订号,并将 HEAD_REVISION 替换为步骤 3 中记录的修订号:
svn merge -r LAST_MERGED_REVISION:HEAD_REVISION \
svn://server.com/svn/repository/trunk .
5.a - 在输出中查找错误。能找到所有文件吗?不应该删除的东西被删除了吗?也许你做错了。如果需要还原,请运行 svnrevert -R
5.b - 如果 5.a 中一切正常,检查冲突,解决任何发现的冲突:
svn status | egrep '^C|^.C'
6 - 提交合并,将 COMMAND 替换为步骤 4 中的确切命令内容:
svn ci -m "Merged changes from trunk to your_branch: COMMAND"
将树枝折回树干
嘿,你的分支完成了。现在它必须成为主干。
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
完毕!
请对此程序的任何建议、意见或反馈表示赞赏。