是否有从CVS到Git的迁移工具?

我打算从CVS切换到Git。 在SVN的情况下,似乎有cvs2svn 。 有没有类似的工具,可以轻松地从CVS迁移到Git?

唯一有增量导入的工具似乎是git-cvsimport 。 如果你想从CVS转换( 迁移 )到Git,现在最好的解决scheme似乎是上面提到的cvs2svn的cvs2git模式 。

另请参阅Git wiki上的“ 接口前端和工具”页面,了解与其他版本控制系统交互的部分。

cvs2git

除了提供的答案,这里是如何使用cvs2git工具将cvs转换为git的指南。 在这里,modulename是要导入的CVS目录的名称。

先决条件

应该已经安装了cvs2svn包(其中包括cvs2git命令)。

更新:步骤1和2不完全正确 – 在尝试之前,阅读下面的评论由mhagger,cvs2git的维护者

  1. 结帐模块名称

     cvs -d URL co -P modulename 
  2. 创build一个由cvs2git所需的空CVSROOT

     mkdir modulename/CVSROOT 
  3. http://cvs2svn.tigris.org/svn/cvs2svn/trunk/cvs2git-example.options下载一个cvs2git.options的例子(用户“guest”,没有密码);

  4. 编辑cvs2git.options文件。 用'modulename'replacer'test-data / main-cvsrepos'。 编辑作者转换。

     # edit this run_options.set_project( r'modulename', # and this author_transforms={ 'jrandom' : ('J. Random', 'jrandom@example.com'), 'mhagger' : 'Michael Haggerty <mhagger@alum.mit.edu>', 
  5. 运行cvs2git来创buildgit临时文件

     cvs2git --options=cvs2git.options --fallback-encoding utf-8 
  6. 创buildgit存储库

     mkdir gitrepo && cd gitrepo && git init . 
  7. 从cvs2git创build的git临时文件导入

     cat ../cvs2git-tmp/git-{blob,dump}.dat | git fast-import 
  8. 结帐工作拷贝

     git reset --hard 

cvs2svn有一个cvs2git模式。

另一种可能是使用git cvsimport *

如果任何人仍然有使用CVS的不幸,你可以尝试“废话”: https : //github.com/rcls/crap这是快速(只要访问CVS可以快),支持你在cvs回购find的混乱,和增量。

我自己也没有尝试过,但是朋友们已经有了很好的成功,先从CVS转换到SVN,再从SVN转换到Git。 看起来做这些转换的工具已经比直接的CVS到Git转换更彻底了。

您可以将fromcvs添加到列表中。 它转换得很好,速度非常快,也是渐进的。 它不会做粘性标签,只有分支,但是。

我试过cvs2git,git-cvsimport和parsecvs。

cvs2git有时(据我记忆)创build标签的假分支。

git-cvsimport不支持变更集的多个标签。 然而,可以抓住一些额外的变化,以支持它,并改变原来的git-cvsimport到使用更新的cvsps(我试过了,它似乎工作)。 在优势方面,它支持增量更新,并有一些逻辑来正确导入合并(但它需要适当的格式提交消息)。

parsecvs到目前为止给了我最好的结果。 不幸的是,网上可用的代码不能干净地用最新的git编译。 而不是微不足道的变化是可行的。

编辑:它看起来像ESR接pipe了cvsps和parsecvs所以有一些希望CVS- > GIT的迁移。 但他已经在一些邮件列表中提到,他可能会宣布他最近接手的一些工具正式死亡。

你可以使用git cvsimport 。 它需要安装cvsps ,但是您需要安装2.x,因为3.x 不再兼容 。

然后在空的git上导入CVS仓库。 示例用法:

 git cvsimport -C RepoName -r cvs -o master -k -v -d:pserver:anonymous@reponame.cvs.sourceforge.net:/cvsroot/path ModuleName 

在OSX上,您按以下方式安装cvsps-2.1brew ):

 brew tap homebrew/versions brew install cvsps2 brew link cvsps2 

你也可以使用cvs2git工具,它可以将CVS仓库转换成git。 但是,您需要访问CVSROOT目录。

检查cvs2git文档的安装步骤。

用法示例:

 cvs2git --blobfile=git-blob.dat --dumpfile=git-dump.dat --username=cvs2git /path/to/cvs/repo 

这将以git快速导入格式创build两个输出文件。 这些文件的名称由您的选项文件或命令行参数指定。 在这个例子中,这些文件被命名为cvs2git-tmp/git-blob.datcvs2git-tmp/git-dump.dat

这些文件可以通过以下方式导入到空的git存储库中:

 cat git-blob.dat git-dump.dat | git fast-import 

然后删除TAG.FIXUP分支并运行gitk --all查看转换结果。

检查更多,通过运行: cvs2git --help

我读了Vanuan和Mhagger对此的评论。 不幸的是,mhagger没有发布如何使用cvs2git 。 这一切都写得很好: http : //www.mcs.anl.gov/~jacob/cvs2svn/cvs2git.html

我使用cvs2git而不是git-cvsimport因为git-cvsimport的文档build议使用它来避免git-cvsimport的问题: https : git-cvsimport -cvsimport.html#问题

它遵循它的精髓,为我在Debian Sid上从sourceforge CVS仓库创build一个git仓库:

 $ apt-get install cvs2svn cvs $ mkdir project.cvs $ rsync -av rsync://${PROJECT}.cvs.sourceforge.net/cvsroot/${PROJECT}/ project.cvs $ cvs2git --blobfile=git-blob.dat --dumpfile=git-dump.dat --username=cvs2git project.cvs $ mkdir project.git $ cd project.git $ git init $ cat ../git-blob.dat ../git-dump.dat | git fast-import 

rsync步骤是需要的,因为cvs2git需要访问整个历史logging。 一个简单的结帐是不够的。

我发现cvs-fast-export做得非常出色。 我不得不自己下载和编译,但没有任何重大问题。