当前位置:  开发笔记 > 前端 > 正文

Subversion合并来自不同存储库的更改

如何解决《Subversion合并来自不同存储库的更改》经验,为你挑选了2个好方法。

我真的很困惑.我想做一些事情a)看起来应该很简单,并且b)其他人必须一直做,但我无法找到在任何地方做到的最佳方式.

有一个包含一些第三方代码的外部存储库.我想获取代码版本1的副本并将其放在我自己的存储库中,然后根据自己的需要进行自定义.当该代码的第2版发布时,我希望能够使用所有版本2更改升级我的自定义版本,保留我的自定义.

我已经阅读了有关供应商分支的信息(http://svnbook.red-bean.com/en/1.5/svn.advanced.vendorbr.html),但我不明白为什么要合并供应商代码的先前副本和新的供应商代码的副本需要如此复杂(即svn_load_dirs.pl).当然,如果第三方代码存储在SVN存储库中,那么有关已移动/已删除哪些文件的所有历史记录都是已知的,那么为什么需要告诉它手动更改了什么?

引用:

例如,您将有机会告诉脚本您知道libcomplex版本1.0中的math.c文件已在libcomplex 1.1中重命名为arithmetic.c.

我也读过(http://svn.haxx.se/users/archive-2006-04/0285.shtml)可以简单地在不同的存储库之间运行合并,但我不认为这是可能的,每当我尝试它时,它都失败了(尽管我本来可能做错了).

任何人都可以为我澄清这一点,并提出最佳解决方案吗?



1> Mike Houston..:

我刚刚尝试了TortoiseSVN的简短实验:

创建测试存储库

    在rep1和rep2中创建两个新的存储库

    检查rep1到co1

    将文本文件添加到co1并将其签入

    将rep1导出到ex1

    将ex1导入rep2

在此阶段,您将处于在新存储库中创建本地"分支"的状态.最后两个步骤是现有项目所需的全部步骤.

要模拟对原始仓库的某些更改,请修改co1中的文本文件并提交更改.

合并变更

现在,要创建自己的工作副本,请将rep2检入co2.

我们应该准备尝试从rep1合并到co2.

打开co2的合并对话框并将其指向rep1.

对于"发件人"修订,请选择导出副本的修订版本(在本例中为修订版1),或者上次更新本地副本的修订版本.

对于"到"修订,请选择要应用的HEAD或最新更新.

结果

这似乎按预期工作,rep1的修改应用于co2中rep2的工作副本.然后需要将它们提交回本地存储库.



2> Tall Jeff..:

您提供的供应商分支链接有效地描述了您要执行的操作的过程.这是一个完美的解决方案,相对于允许您对供应商分支进行直接更新(导入),然后在您提及时,将允许您将供应商的更新与主开发分支中的更改合并.

问题是Subversion实际上不提供直接支持文件重命名和文件之间的文件移动,以便从供应商代码进行连续更新,因为您只是获取源文件内容的快照....需要运行命令进入版本系统,以指示对组成新版本的文件名树进行了哪些更改.这是svn_load_dirs.pl脚本进程的目的.它可以帮助您调整版本历史记录以匹配分支,以便您可以继续进行合并.如果供应商没有在您导入的版本之间重命名和/或移动文件,则不会出现此问题.

无论如何,这里描述的过程是你/需要做的.

推荐阅读
小妖694_807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有