代码之家  ›  专栏  ›  技术社区  ›  Thorbjørn Ravn Andersen

将包含Eclipse项目的CVS存储库转换为Git的最可靠方法是什么?

  •  9
  • Thorbjørn Ravn Andersen  · 技术社区  · 14 年前

    我有一个情况,我有一个老的cvs存储库,我们想转换为git一次和所有,同时保持完整的历史等。

    存储库根目录下的所有文件夹都包含Eclipse项目(平面或动态Web项目),包括.classpath和.project。我们使用团队项目集检查给定任务所需的项目(项目集位于包含主项目的项目中,其余项目是库项目)。

    签出团队项目集时,工作区将完全填充。

    这种方法已经运行了很多年(除了3.5附带的项目集部分),如果可能的话,我们希望以类似的方式与Git合作,但我们不确定如何工作。

    我玩过一些 git cvs import 但是失败了——可能是因为我们没有使用模块。

    您建议我们如何做到这一点,以及我们应该如何与Git合作,以允许我们当前使用共享库项目?我们会 为我们的图书馆项目介绍Maven并创建Maven模块?或者只是蚂蚁常春藤?


    编辑:我现在已经设法用一个合适的cvs2svn调用将我们的cvs存储库转换为Subversion,并且发现Eclipse很好地识别了产生的Subversion存储库。不幸的是克隆后 http://github.com/iteman/svn2git `尝试运行bin/svn2git

    tra@Sandbox:~/cvsgit/svn2git/svn2git$ bin/svn2git
    bin/svn2git:35:in `initialize': wrong number of arguments (2 for 1) (ArgumentError)
            from bin/svn2git:35:in `new'
            from bin/svn2git:35
    

    这是与Ubuntu10.04.1LTS服务器,我已经尝试了各种各样的sudo与ruby及其gems的事情,没有完全理解我做了什么,因为我不是一个ruby程序员,所以我可能有点搞砸了事情。我很感激你的建议——如果最简单的方法是安装另一个Linux变体来进行转换,那就好了。


    编辑:

    https://help.ubuntu.com/community/Git http://css.dzone.com/articles/subversion-git-morning


    编辑:我第一次尝试使用默认的svn2git成功完成(一段时间后),我得到了一个很好的存储库,其中 git branch -a 粗略报道

    tra@Sandbox:~/gitroot/svnroot$ git branch -a
    * master
      remotes/XX64_DEPLOYED_CODE
      remotes/Beta1
      remotes/Beta2
      remotes/SV46
      ... lots more
    

    我们希望能够检查SV46分支并使用它(我们基本上不关心标签,只关心实际的分支)。我已经设置了Gitosis并将这个存储库推送到Gitosis,并将其克隆到另一台计算机上,以了解如何使用Eclipse执行“使用SV46”位。 存储库不知道所有分支:

    tra@TRA ~/git/git00 (master)
    $ git branch -a
    * master
      remotes/origin/HEAD -> origin/master
      remotes/origin/master
    

    我需要按摩svn2git的原始结果来将信息导入Gitosis存储库吗?我需要用一个论点来克隆吗?我应该用建议的版本来重做svn2git步骤,而不是用Ubuntu发货吗?

    编辑:事实证明,使用“git push--mirror”发布svn2git生成的存储库使Gitosi存储库中显示了一些内容。我现在看到下面的内部Gitosis(修剪):

    tra@Sandbox:/srv/gitosis/repositories/git01.git$ git branch -a
    * master
      remotes/XX64_DEPLOYED_CODE
      remotes/Basic_Beta1
      remotes/Beta1
      remotes/Beta2
      remotes/SV46
      ... lots more
    tra@Sandbox:/srv/gitosis/repositories/git01.git$ git branch
    * master
    tra@Sandbox:/srv/gitosis/repositories/git01.git$ git tag -l
    tra@Sandbox:/srv/gitosis/repositories/git01.git$
    

    尝试用克隆此存储库 git clone gitosis@sandbox:git01 -b remotes/SV46 git clone gitosis@sandbox:git01 -b SV46 两者都告诉我,远程分支没有找到上游的来源,而是使用head。

    我找错树了吗?

    1 回复  |  直到 14 年前
        1
  •  6
  •   Community CDub    8 年前

    首先,将子模块用于中央VCS存储库的独立部分(即CVS repo)总是很好的(请参见 What are the Git limits? “”。
    这意味着您将最终得到许多独立的git repo,即“一组文件彼此独立地发展”,这就是子模块存在的原因。

    因此需要多个git导入(在多个repo中)。

    但自从 git cvs import 并非总是能胜任这项任务,我建议:

    • CVS2SVN,以便先获得SVN回购(仅一个回购)
    • svn2git 为了正确地将您的svn repo转换为git repo(即将svn分支转换为git分支 svn标签转换为git标签)