是否有从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的维护者
-
结帐模块名称
cvs -d URL co -P modulename
-
创build一个由cvs2git所需的空CVSROOT
mkdir modulename/CVSROOT
-
编辑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>',
-
运行cvs2git来创buildgit临时文件
cvs2git --options=cvs2git.options --fallback-encoding utf-8
-
创buildgit存储库
mkdir gitrepo && cd gitrepo && git init .
-
从cvs2git创build的git临时文件导入
cat ../cvs2git-tmp/git-{blob,dump}.dat | git fast-import
-
结帐工作拷贝
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.1
( brew
):
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.dat
和cvs2git-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做得非常出色。 我不得不自己下载和编译,但没有任何重大问题。