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

时间:2009-05-19 05:58:50

标签: git version-control migration cvs

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

11 个答案:

答案 0 :(得分:32)

增量导入的唯一工具似乎是git-cvsimport。如果您想将(迁移)从CVS转换为Git,现在似乎可以在cvs2git mode of cvs2svn上面提到最佳解决方案。

另见Git wiki上的Interfaces Frontends And Tools页面,关于与其他版本控制系统交互的部分。

答案 1 :(得分:17)

cvs2git

除了提供的答案之外,这里还有一个关于如何使用cvs2git工具将cvs转换为git的指南。这里,modulename是您要导入的CVS目录的名称。

<强>先决条件

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

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

  1. 结帐模块名称

    cvs -d URL co -P modulename
    
  2. 创建cvs2git

    所需的空CVSROOT
    mkdir modulename/CVSROOT
    
  3. http://cvs2svn.tigris.org/svn/cvs2svn/trunk/cvs2git-example.options下载cvs2git.options的示例(用户“guest”没有密码)

  4. 编辑cvs2git.options文件。将r'test-data / main-cvsrepos'替换为'modulename'。编辑作者转换。

    # 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来创建git临时文件

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

    mkdir gitrepo && cd gitrepo && git init .
    
  7. 从cvs2git

    创建的git temp文件导入
    cat ../cvs2git-tmp/git-{blob,dump}.dat | git fast-import
    
  8. 结帐工作副本

    git reset --hard
    

答案 2 :(得分:13)

cvs2svn具有cvs2git模式。

答案 3 :(得分:8)

如果有人仍然不幸使用CVS,你可以尝试“废话”:https://github.com/rcls/crap 它很快(只要访问CVS可以很快),支持你在cvs repos和增量中找到的混乱。

答案 4 :(得分:7)

替代方案可能是使用git cvsimport *

答案 5 :(得分:5)

我自己没有尝试过,但是朋友们已经报道了从CVS到SVN,然后从SVN转换为Git的成功转换。看起来,进行这些相应转换的工具比直接CVS转换为Git过渡更彻底。

答案 6 :(得分:1)

您可以将fromcvs添加到列表中。它转换得很好,非常快,也是增量的。但是,它不会执行粘性标记,只会执行分支。

答案 7 :(得分:1)

您可以使用git cvsimport。它需要安装cvsps,但您需要安装2.x,因为3.x已经not incompatible了。

然后在空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 documentation是否有安装步骤。

使用示例:

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

这将以git快速导入格式创建两个输出文件。这些文件的名称由选项文件或命令行参数指定。在示例中,这些文件名为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来检查更多内容。

答案 8 :(得分:1)

我读了Vanuan和mhagger对它的评论。不幸的是,mhagger没有发布如何使用cvs2git进行操作。这里写得非常好:http://www.mcs.anl.gov/~jacob/cvs2svn/cvs2git.html

我使用cvs2git代替git-cvsimport,因为git-cvsimport的文档建议使用它来避免git-cvsimporthttps://www.kernel.org/pub/software/scm/git/docs/git-cvsimport.html#issues

它遵循它的本质,我可以从Debian Sid上的sourceforge CVS存储库创建一个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需要访问整个历史记录。简单的结账是不够的。

答案 9 :(得分:1)

我是cvs-fast-export的维护者。我曾经维护过cvsps和parse2cvs,并仔细评估了cvs-fastimport和cvs2git。

从CVS到git的转换是带有尖锐边缘案例的一个棘手的难题。现有的所有转换工具都有已知的局限性,其中一些相当严重。

我建议先尝试cvs-fast-export。它产生的转换比其他任何方式都更好,更快,除非在极少数情况下它会彻底失败并崩溃。如果遇到罕见但令人恐惧的“分支周期错误”,请尝试cvs2git。

不要相信cvs-fastimport,它有很多错误,并且经常搞乱分支联接。

有关更多信息,请参见http://www.catb.org/esr/cvs-fast-export/

答案 10 :(得分:0)

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