我可以将单个文件从 CVS 迁移到 SVN 吗?

Posted

技术标签:

【中文标题】我可以将单个文件从 CVS 迁移到 SVN 吗?【英文标题】:Can I migrate single file from CVS to SVN? 【发布时间】:2010-09-03 15:49:58 【问题描述】:

现在一个项目的 CVS 存储库中有一个文件,需要使用 SVN 将其移动到另一个项目。我想保留提交的历史记录。

有办法吗?

【问题讨论】:

要保留历史记录吗? 你不能简单地检出 CVS 存储库和 SVN 存储库,然后将文件复制到 SVN 存储库并签入吗?也许我误解了这个问题。 正如布鲁诺所说,我想保留历史。我认为这很明显,但现在我将明确更新问题。 【参考方案1】:

如果这是一个新的 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

【讨论】:

那是一个非常有用的帖子。非常感谢你!!但是,我需要将一个文件迁移到一个已经存在的 SVN 项目中。关于如何做到这一点的任何建议(我知道我无论如何都不能保持正确的日期)? 这并不容易,特别是如果一个文件有分支和/或标签。我建议您将其转换为如上所述的单独项目,然后在导入后(在 HEAD 修订版中)“svn mv”文件的当前版本从它自己的项目目录到它应该位于主目录的位置项目。 (这将保留文件的历史记录。)如果有多个分支/标签,那么您可能必须将文件的每个分支/标签版本“svn mv”和/或“svn cp”到相应的主分支/标签项目。

以上是关于我可以将单个文件从 CVS 迁移到 SVN 吗?的主要内容,如果未能解决你的问题,请参考以下文章

CVS 到 SVN 的迁移和分支内的分支

cvs2svn 修改二进制文件

多项目布局中的逐步 cvs2svn 迁移

从 CVS 检出文件中获取有关 CVS 服务器的信息

cvs2svn 迁移

将许多 CVS 模块转换为单个 SVN 存储库