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

时间:2013-12-12 13:34:55

标签: svn merge vendor-branch

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

开源项目得到进一步发展,错误得到修复,功能得到补充。但我自己的私人改变仍然适用。

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

我正在从Eclipse完成所有这些工作,因此欢迎使用Eclipse SVN工具(Subclipse)完成解决方案。

1 个答案:

答案 0 :(得分:2)

看起来您正在寻找Vendor Branches

如SVNBook的Vendor Branches部分所述,您可以执行以下操作:

这是一个遵循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. 如果以后您想将开源项目升级到更新版本 (例如,OS开发人员发布1.1版本)保持你的 更改,您应该svn checkout <repo-URL>/vendor/current atop 包含1.1版本OS项目的无版本文件夹。您 将需要更改的svn addsvn remove个文件 它们的位置介于1.0和1.1之间。这样你就得到了 包含1.1版本的工作副本,您提交<repo-URL>/vendor/current。这样您只提交1.0和1.1版本之间的更改。稍后你可以svn copy <repo-URL>/vendor/current<repo-URL>/vendor/1.1为其创建标记。

  7. 如果要将开发分支中的OS项目升级到版本1.1以保留更改,可以使用包含已修改项目数据的工作副本执行2-URL合并,命令行看起来像这样:

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

  8. 以上说明并未获取在1.0和1.1版本的OS项目之间进行的文件布局更改,您将需要手动处理它们。如果要自动执行添加/删除文件的任务,可以使用svn_load_dirs.pl Perl脚本(或类似的python脚本)执行此任务。该脚本可在以下位置获得 http://svn.apache.org/repos/asf/subversion/trunk/contrib/client-side/svn_load_dirs/ 并在SVNBook 1.7中进行了解释。

相关问题