我有一个情况,我有一个旧的 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/SV46
或 git 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/