我们使用一个开源项目,该项目托管在SVN服务器上,我们只有read访问权限(称之为SVN1)。我们签出了这个代码,为了我们的私人使用,我们做了一些修改。
开源项目得到了进一步的开发,bug得到了修复,功能得到了添加。但我自己的私人改变仍然适用。
什么是好的版本控制方法,这样我就可以将自己的代码持久化并版本化为自己的SVN(SVN2),同时仍然从开源SVN获得更新?
我是在Eclipse中完成这一切的,所以欢迎使用Eclipse SVN工具(Subclipse)来完成解决方案。
看起来您正在寻找供应商分支机构。
如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版)如果发生更改,则应将
svn checkout
更改为<repo-URL>/vendor/current
位于包含操作系统项目1.1版本的未转换文件夹的顶部。你将被要求用于已更改的svn add
和svn 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
以为其创建标签。 -
如果你想将开发分支中的操作系统项目升级到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中进行了说明。