java - 将包含 Eclipse 项目的 CVS 存储库转换为 git 的最可靠方法?

标签 java eclipse git cvs

我有一个情况,我有一个旧的 CVS 存储库,我们想一劳永逸地将其转换为 git,同时保留完整的历史记录等。

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

checkout Team ProjectSet 时,工作区已完全填充。

这种方法多年来一直运行良好(除了 3.5 附带的项目集部分),如果可能的话,我们希望以类似的方式使用 git,但我们不确定如何操作。

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

你会如何建议我们这样做,我们应该如何使用 git 来允许我们当前使用共享库项目?我们必须为我们的图书馆项目引入maven 和创建maven 模块吗?或者只是 Ant Ivy ?


编辑:我现在已经成功地使用合适的 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

这是与 Ubuntu 10.04.1 LTS 服务器一起使用的,我已经尝试过使用 Ruby 及其 gems 进行各种 sudo 操作,但由于我不是 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 工作”位。 THAT 存储库不知道所有分支:

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

我是否需要修改 svn2git 的原始结果以将信息放入 gitosis 存储库?我需要用参数克隆吗?我应该使用建议的版本而不是 Ubuntu 附带的版本重做 svn2git 步骤吗?

编辑:事实证明,使用“git push --mirror”发布 svn2git 生成的存储库会使内容显示在 gitosis 存储库中。我现在在 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/SV46git clone gitosis@sandbox:git01 -b SV46 克隆此存储库都告诉我未找到远程分支的上游来源,而是使用 HEAD。

我是不是找错了树?

最佳答案

首先,为中央 VCS 存储库(即 CVS 存储库)的独立部分使用子模块总是好的(参见“What are the Git limits?”)。
这意味着您最终会得到许多独立的 Git 存储库,即“一组文件相互独立演化”,这就是存在子模块的原因。

因此需要多次 Git 导入(在多个仓库中)。

但是由于 git cvs import 并不总是能完成任务,我建议:

  • cvs2svn 以便首先获得一个 SVN 仓库(只有一个仓库)
  • svn2git 为了正确地将您的 SVN 存储库转换为 git 存储库(即将 SVN 分支转换为 Git 分支 SVN 标签转换为 Git 标签)

关于java - 将包含 Eclipse 项目的 CVS 存储库转换为 git 的最可靠方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3321290/

相关文章:

eclipse - 如何显示空格和制表符但不显示换行符?

git - Git子模块和Repo的优缺点是什么?

xcode git pull/push 崩溃

java - Random.nextFloat 不适用于花车?

Java Streams - 有效地对排序流上的项目进行分组

java - 为什么安装后在模拟器上运行应用程序时,模拟器浏览屏幕上不显示该应用程序?

git - 如何列出特定目录中标签之间添加的文件?

java - 继承不允许我创建子类的对象?

java - 我如何在 J2ME 中拆分字符串?

android eclipse 和外部 URL