SVN 分支到主干合并问题
SVN Branch To Trunk Merge Issue
我已经尝试用谷歌搜索手头的问题,但无济于事。我的团队处于一个有趣的情况。
我们的发布分支需要合并回我们的主干。在大约 4 周的提交之后,没有人这样做(我们通常尝试每周做一次)。然后开发人员将分支合并到主干,但只做了一系列修订,不包括对分支的所有修订。
示例:我们在提交 1000 处创建了分支。提交 1000-1400 全部发生在第一次合并之前。开发人员合并了 1300-1400 个提交。一直以来,也有对主干的提交。
又过了一两周,现在我们要提交 1500 个。我们再进行一次合并,当然,一切都失败了;我们不需要大量的提交来让构建通过(提交 1000-1300)。我们不能完全恢复,因为我们冒着破坏整个时间对主干所做的所有更改的风险。
我们有哪些选择?这是一次重要的合并,因为我们的主要版本即将发布;我们需要在相对较短的时间内尽可能减少搞砸的机会。
天哪,这听起来很乱...
首先要做的是让所有开发人员离开回购协议几个小时,如果不是几天的话(因为这需要一段时间并且会有压力,希望你周末没有计划...... . ),或许也可以让您的 CI 系统离线一段时间。 (不是必要的,但它会保存一堆损坏的构建)
然后读这个:SVN Manual for dump/load
为您的存储库文件系统制作一个备份副本。 (以防你犯错。)
svnadmin dump REPO_LOCATION_HERE --revision 0:LAST_SAFE_REVISION_NUMBER_HERE > baseline.dumpfile
创建另一个存储库,并“加载”您的转储文件
svnadmin load --force-uuid /opt/subversion/my_new_repo < baseline.dumpfile
现在回到你的旧仓库,
svn log -r LAST_SAFE_REVISION_NUMBER_HERE:HEAD REPO_LOCATION_HERE > reading.txt
通过 reading.txt 并手动记下提交给 t运行k 的 'valid' 并且需要保留的内容,(几乎所有内容直到第一次合并。 ), 并 dump/load 使用上述方法将它们手动添加到新的 repo 中。
现在重新进行第一次合并(这次一定要包括分支中的所有修订。)
这是有趣的部分,在第一次合并到第二次合并后立即执行 svn log --diff。手动使用 linux 'patch' 命令将文件一个接一个地修补到新的 repo 中。对于 'dodgy' 100 个左右的提交。,然后 svn dump/load 剩下的好的(假设有。)
最后从您的新存储库中进行全面检查,运行 您所有的测试。如果他们通过,将旧仓库移动到新位置,并将新仓库移动到旧仓库的位置。并告诉你所有的开发人员做一个干净的结帐,你应该很好。
有一个名为 tkdiff(tkcvs 包的一部分)的简洁工具可以帮助您简化此过程。一点点/试着看看造成的混乱。 )
如果您在任何阶段搞砸了,请将 'old' 存储库移至新位置,并将存储库备份的副本放在旧存储库的位置。
祝你好运!!!!
我已经尝试用谷歌搜索手头的问题,但无济于事。我的团队处于一个有趣的情况。
我们的发布分支需要合并回我们的主干。在大约 4 周的提交之后,没有人这样做(我们通常尝试每周做一次)。然后开发人员将分支合并到主干,但只做了一系列修订,不包括对分支的所有修订。
示例:我们在提交 1000 处创建了分支。提交 1000-1400 全部发生在第一次合并之前。开发人员合并了 1300-1400 个提交。一直以来,也有对主干的提交。
又过了一两周,现在我们要提交 1500 个。我们再进行一次合并,当然,一切都失败了;我们不需要大量的提交来让构建通过(提交 1000-1300)。我们不能完全恢复,因为我们冒着破坏整个时间对主干所做的所有更改的风险。
我们有哪些选择?这是一次重要的合并,因为我们的主要版本即将发布;我们需要在相对较短的时间内尽可能减少搞砸的机会。
天哪,这听起来很乱...
首先要做的是让所有开发人员离开回购协议几个小时,如果不是几天的话(因为这需要一段时间并且会有压力,希望你周末没有计划...... . ),或许也可以让您的 CI 系统离线一段时间。 (不是必要的,但它会保存一堆损坏的构建)
然后读这个:SVN Manual for dump/load
为您的存储库文件系统制作一个备份副本。 (以防你犯错。)
svnadmin dump REPO_LOCATION_HERE --revision 0:LAST_SAFE_REVISION_NUMBER_HERE > baseline.dumpfile
创建另一个存储库,并“加载”您的转储文件
svnadmin load --force-uuid /opt/subversion/my_new_repo < baseline.dumpfile
现在回到你的旧仓库,
svn log -r LAST_SAFE_REVISION_NUMBER_HERE:HEAD REPO_LOCATION_HERE > reading.txt
通过 reading.txt 并手动记下提交给 t运行k 的 'valid' 并且需要保留的内容,(几乎所有内容直到第一次合并。 ), 并 dump/load 使用上述方法将它们手动添加到新的 repo 中。
现在重新进行第一次合并(这次一定要包括分支中的所有修订。)
这是有趣的部分,在第一次合并到第二次合并后立即执行 svn log --diff。手动使用 linux 'patch' 命令将文件一个接一个地修补到新的 repo 中。对于 'dodgy' 100 个左右的提交。,然后 svn dump/load 剩下的好的(假设有。)
最后从您的新存储库中进行全面检查,运行 您所有的测试。如果他们通过,将旧仓库移动到新位置,并将新仓库移动到旧仓库的位置。并告诉你所有的开发人员做一个干净的结帐,你应该很好。
有一个名为 tkdiff(tkcvs 包的一部分)的简洁工具可以帮助您简化此过程。一点点/试着看看造成的混乱。 )
如果您在任何阶段搞砸了,请将 'old' 存储库移至新位置,并将存储库备份的副本放在旧存储库的位置。
祝你好运!!!!