【问题标题】:Need help / advice on using branches and merging back to trunk需要有关使用分支和合并回主干的帮助/建议
【发布时间】:2011-09-16 21:57:27
【问题描述】:

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

我已经使用 svn 很多年了。在我的个人项目中,我总是很高兴地在trunk 上破解,并且在很长一段时间内以单行线性方式进行版本控制已经接近完美。简单高效。一切都很幸福,直到我想要更多地控制 3rd 方库的那一天

今天,我正在从事一个我认为已经超越了从树干直接破解方法的项目。我有多个 3rd 方库,其中一些每周都会更改,我确实需要对其中的内容进行更多控制。我需要能够查看 3rd 方库版本之间的特定变更集并跟踪我对特定库所做的更改。我见过几次代码库变得非常混乱,并且很难在没有经验的 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 上开发了一段时间,其他人也在 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 - 在输出中查找错误。能找到所有文件吗?不应该删除的东西是否被删除了?也许你做错了。如果需要还原,请运行 svn revert -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 

完成!

感谢您对此程序的任何建议、cmets 或反馈。

【问题讨论】:

    标签: svn version-control merge branch vendor-branch


    【解决方案1】:

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

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

    我特别不喜欢这个建议

    2 - 完全删除主干

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

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

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

    【讨论】:

      【解决方案2】:

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

      --relocate 选项是切换到另一个 repo。新分支是主干的副本,因此请切换。

      只要做:

      svn switch ^/branches/your_branch
      

      svn 信息 | grep 网址 svn起来

      这个更新大部分时间什么都不做。

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

      大部分时间我使用 TortoiseSVN 但只尝试:

       svn merge ^/trunk .
      

      试试这是否可行,它应该。关于合并跟踪,较新的 SVN 使用合并信息属性,所以大多数时候它应该知道要合并什么。有问题你的方法应该很好用。

      • ^/ 是存储库的相对 url。
      • svn info ^/ 试试你的 svn 版本是否可用(你应该在 svn 文件夹中)

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

      试试:

      # 注意你的分支应该是最新的(在分支早期解决大部分冲突) svn 开关 ^/trunk svn merge --reintegrate ^/branches/your_branch .

      解决冲突;)

      svn commit -m "重新整合 your_branch" svn delete ^/branches/your_branch

      如果您不知道如何处理,大多数情况下最好删除此分支(这不是那么容易,所以最好删除它并创建新的)。

      还要注意更改名称/重新定位您在其他分支/主干中更改的文件。这将导致您发生树冲突。如果其他分支没有变化,可以随意做。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-06-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多