合并来自两个SVN存储库的更改



我们使用一个开源项目,该项目托管在SVN服务器上,我们只有read访问权限(称之为SVN1)。我们签出了这个代码,为了我们的私人使用,我们做了一些修改。

开源项目得到了进一步的开发,bug得到了修复,功能得到了添加。但我自己的私人改变仍然适用。

什么是好的版本控制方法,这样我就可以将自己的代码持久化并版本化为自己的SVN(SVN2),同时仍然从开源SVN获得更新?

我是在Eclipse中完成这一切的,所以欢迎使用Eclipse SVN工具(Subclipse)来完成解决方案。

看起来您正在寻找供应商分支机构。

如SVNBook的供应商分支部分所述,您可以执行以下操作:

这是一个遵循SVNBook说明的示例工作流程;你可以需要调整以适应您的需求

  1. 使用svn import执行到存储库的初始导入,以<repo-URL>/vendor/current

  2. svn copy<repo-URL>/vendor/current<repo-URL>/vendor/1.0以便创建标签。(这里的1.0对应于开源项目版本,您可以在实际情况中使用任何名称或版本号)。

  3. svn copy <repo-URL>/vendor/1.0存储库,例如<repo-URL>/project1/trunk

  4. svn checkout <repo-URL>/project1/trunk到您最初导入的本地系统上的同一目录。

  5. 现在,您可以修改存储在工作副本中的数据,并将其提交到项目中。

  6. 如果一段时间后你想将开源项目升级到新版本(例如,操作系统开发人员1.1版)如果发生更改,则应将svn checkout更改为<repo-URL>/vendor/current位于包含操作系统项目1.1版本的未转换文件夹的顶部。你将被要求用于已更改的svn addsvn remove文件它们的位置在1.0和1.1版本之间。这样你会得到包含您提交给<repo-URL>/vendor/current的1.1版本的工作副本。通过这种方式,您只提交1.0和1.1版本之间的更改。稍后您可以svn copy<repo-URL>/vendor/current<repo-URL>/vendor/1.1以为其创建标签。

  7. 如果你想将开发分支中的操作系统项目升级到1.1版本,保留你的更改,你可以使用包含修改后的项目数据的工作副本执行2-URL合并,命令行如下所示:

    svn merge "<repo-URL>/vendor/1.0" "<repo-URL>/vendor/1.1" "<path-to-WC>"

上面的描述没有提到在操作系统项目的1.0和1.1版本之间所做的文件布局更改,您将需要手动处理这些更改。如果您想自动化添加/删除文件的任务,可以使用svn_load_dirs.pl Perl脚本(或类似的python脚本)执行此任务。该脚本可在http://svn.apache.org/repos/asf/subversion/trunk/contrib/client-side/svn_load_dirs/并且也在SVNBook 1.7中进行了说明。

最新更新