现在有一个文件位于项目的 CVS 存储库中,需要使用 SVN 将其移动到另一个项目。我想保留提交的历史。
有没有办法这样做?
如果这是一个新的 Subversion 存储库,那么这很简单:只需创建一个包含单个文件的假 CVS 存储库(如下所述)并使用cvs2svn对其进行转换。
如果 Subversion 存储库已经存在,并且新文件将成为该存储库中新子项目的开始,那么您可以转换为 Subversion 转储文件(使用 cvs2svn 的 --dumpfile 选项),然后将其加载到现有存储库使用
$ svnadmin load --parent-dir=/newproject /path/to/svnrepo <dumpfile.out
这将在 Subversion 中创建一个新的子项目,包括目录 /newproject/trunk、/newproject/branches 和 /newproject/tags,并且(例如)文件的主干版本将位于 /newproject/trunk/myfile。
请注意,新文件的历史将作为一系列 Subversion 提交迁移到您的 Subversion 存储库中已经存在的提交之上。因此,Subversion 提交可能不会按时间顺序排列,这会破坏 Subversion 存储库中基于日期的搜索。
无论哪种方式,您都需要首先创建一个包含单个文件的假 CVS 存储库:
$ CVSREPO=$HOME/fakecvs
$ mkdir $CVSREPO
$ mkdir $CVSREPO/CVSROOT # This directory is needed by cvs2svn but can be empty
$ mkdir $CVSREPO/proj
$ cp /path/to/myfile,v $CVSREPO/proj/
然后使用cvs2svn从路径 $CVSREPO/proj转换:
$ cvs2svn [options...] $CVSREPO/proj