我们使用一个开源项目,它托管在我们只有读取访问权限的 SVN 服务器上(称为 SVN1)。我们检查了这段代码,并为我们的私人使用做了一些修改。
开源项目得到进一步开发,错误得到修复,功能得到添加。但我自己的私人更改仍然适用。
什么是好的版本控制方法,以便我可以将自己的代码持久化并将其版本化为我自己的 SVN (SVN2),同时仍然从开源 SVN 获取更新?
我在 Eclipse 中完成所有这些工作,因此欢迎使用 Eclipse SVN 工具 (Subclipse) 完成的解决方案。
我们使用一个开源项目,它托管在我们只有读取访问权限的 SVN 服务器上(称为 SVN1)。我们检查了这段代码,并为我们的私人使用做了一些修改。
开源项目得到进一步开发,错误得到修复,功能得到添加。但我自己的私人更改仍然适用。
什么是好的版本控制方法,以便我可以将自己的代码持久化并将其版本化为我自己的 SVN (SVN2),同时仍然从开源 SVN 获取更新?
我在 Eclipse 中完成所有这些工作,因此欢迎使用 Eclipse SVN 工具 (Subclipse) 完成的解决方案。
看起来您正在寻找Vendor Branches。
如 SVNBook 的供应商分支部分所述,您可以执行以下操作:
这是一个遵循 SVNBook 说明的示例工作流程;您可能需要进行调整以满足您的需求。
执行初始导入svn import
到您的存储库以
<repo-URL>/vendor/current
svn copy
例如,<repo-URL>/vendor/current
为了
<repo-URL>/vendor/1.0
创建标签。(这里的1.0对应的是开源项目的版本,实际情况下可以使用任何名称或版本号)。
svn copy
<repo-URL>/vendor/1.0
到存储库中的开发分支,例如<repo-URL>/project1/trunk
.
svn checkout
<repo-URL>/project1/trunk
到您最初导入的本地系统上的同一目录。
现在您可以修改存储在工作副本中的数据并将其提交到项目中。
如果一段时间后您想将开源项目升级到更新版本(例如,操作系统开发人员发布 1.1 版本)并保留您的更改,您应该在包含 1.1 版本操作系统项目的未版本化文件夹svn checkout
的<repo-URL>/vendor/current
顶部。您将需要在 1.0svn add
和svn remove
1.1 版本之间更改其位置的文件。这样,您将获得一个包含您提交的 1.1 版本的工作副本<repo-URL>/vendor/current
。这样您只提交 1.0 和 1.1 版本之间的更改。稍后您可以为svn copy
它
创建一个标签。<repo-URL>/vendor/current
<repo-URL>/vendor/1.1
如果您想将开发分支中的 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.pl
Perl 脚本(或类似的 python 脚本)来完成此任务。该脚本可在
http://svn.apache.org/repos/asf/subversion/trunk/contrib/client-side/svn_load_dirs/获得,
并且在 SVNBook 1.7 中也有说明。