0

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

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

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

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

4

1 回答 1

2

看起来您正在寻找Vendor Branches

如 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 版本)并保留您的更改,您应该在包含 1.1 版本操作系统项目的未版本化文件夹svn checkout<repo-URL>/vendor/current 顶部。您将需要在 1.0svn addsvn remove1.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>"

上述描述不包含在 1.0 和 1.1 版本的 OS 项目之间进行的文件布局更改,您将需要手动处理它们。如果您想自动化添加/删除文件的任务,您可以使用svn_load_dirs.plPerl 脚本(或类似的 python 脚本)来完成此任务。该脚本可在 http://svn.apache.org/repos/asf/subversion/trunk/contrib/client-side/svn_load_dirs/获得, 并且在 SVNBook 1.7 中也有说明。

于 2013-12-12T13:48:21.807 回答