我们使用一个托管在SVN服务器上的开源项目,我们只有读取访问权限(称之为SVN1)。 我们检查了这段代码,供我们私人使用,做了一些修改。
开源项目得到进一步发展,错误得到修复,功能得到补充。但我自己的私人改变仍然适用。
什么是良好的版本控制方法,以便我可以持久化并将自己的代码版本化为我自己的SVN(SVN2),同时仍然从开源SVN获取更新?
我正在从Eclipse完成所有这些工作,因此欢迎使用Eclipse SVN工具(Subclipse)完成解决方案。
答案 0 :(得分:2)
看起来您正在寻找Vendor Branches。
如SVNBook的Vendor Branches部分所述,您可以执行以下操作:
这是一个遵循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
到您最初导入的本地系统上的同一目录。
现在您可以修改工作副本中存储的数据并将其提交给项目。
如果以后您想将开源项目升级到更新版本
(例如,OS开发人员发布1.1版本)保持你的
更改,您应该svn checkout
<repo-URL>/vendor/current
atop 包含1.1版本OS项目的无版本文件夹。您
将需要更改的svn add
和svn 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
为其创建标记。
如果要将开发分支中的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中进行了解释。