首页 文章

将svn转换为git的问题

提问于
浏览
-1

我需要删除一个svn服务器,以便用tfs 2018服务器替换它 . 如果它会按照我的方式进行,我们只需要获取文件,但显然人们仍然希望能够查看历史记录和之前的签到 . 我们决定创建两个项目集合 . 一个只读的,您可以查看以前的签到,称为[Product] GitCollection和人们应该在其上工作的集合,称为[Product] Collection . 计划是从旧的svn存储库创建一个git存储库,并将其托管在只读[Product] GitCollection中 . 简短的信息 . svn repo的大小约为22GB .

这就是问题开始的地方 . 我有很多问题让svn存储库移动到一个新的git存储库 . 我正在遵循msdn指令 . https://docs.microsoft.com/en-us/vsts/articles/perform-migration-from-svn-to-git他们非常好,我能够解决作者文件的一些问题(错误的enconding等) . 但现在我处于执行git svn命令的状态,并且在"Initialized empty Git repository in C:/LowBudgetCopy/.git/"之后他被卡住了

没有消息 . 现在40分钟都没事 . 我非常怀疑他有一些问题,但我无法在新生成的git存储库中找到日志文件 . 我也认为它与命令--stdlayout有关 . 如果我没有通过标准布局命令,他至少可以复制文件(带有大量错误日志) . svn或git的标准或必需的文件夹布局我不是那么坚定 . 当前的svn包含多个项目,文件夹结构本身似乎不一致 .

目前,svn存储库包含4个主文件夹,结构如下:

  • /档案

  • / Archive / ctb

  • / Archive / ctb / branches

  • / Archive / ctb / tags

  • / Archive / ctb / trunk

  • ......

  • ......

  • ...(存档文件夹非常一致 . 存档中的每个项目都具有相同的结构)

  • /固件

  • /固件/ CNC

  • /固件/ CNC /部署

  • /固件/ CNC / Doc

  • /固件/ CNC /来源

  • /固件/ CNC /来源/分支机构

  • /固件/ CNC /来源/标签

  • /固件/ CNC / Source / trunk

  • /固件/ CNC /工具

  • ......

  • ......

  • ...(固件文件夹中的项目与存档中的项目具有不同的深度,但与固件中的所有其他项目一致 . )

  • /服务器

  • / Server / Deployments

  • / Server / Doc

  • / Server / Source

  • / Server / Source / Control

  • / Server / Source / Control / branches

  • / Server / Source / Control / trunk

  • / Server / Source / Device

  • / Server / Source / Device / branches

  • / Server / Source / Device / trunk

  • ......

  • ......

  • ......

  • /工具

  • / Tools / Deployer /

  • (直接解决方案 . 没有主干,没有分支文件夹)

  • / Tools / FtpTester

  • / Tools / FtpTester / Source

  • / Tools / FtpTester / Source / Trunc

  • ......

  • ......

  • ...(在tools文件夹中它不一致 . )

任何人有提示或想法?

1 回答

  • 0

    对于一次性迁移, git-svnnot 用于转换存储库或存储库部分的正确工具 . 如果你想使用Git作为现有SVN服务器的前端,它是一个很棒的工具,但对于一次性转换,你应该 not 使用 git-svn ,但 svn2git 更适合这个用例 .

    有很多工具称为 svn2git ,最好的工具是来自https://github.com/svn-all-fast-export/svn2git的KDE . 我强烈建议使用 svn2git 工具 . 这是我所知道的最好的,它可以非常灵活地使用它的规则文件 .

    您将能够轻松配置 svn2git 的规则文件,以便从当前的SVN布局中生成您想要的结果,包括可能存在的任何复杂历史记录,包括从一个SVN仓库生成多个Git repos或将不同的SVN repos合并为一个如果你愿意,可以在一次运行中干净利落地回复 .

    如果您不是100%关于存储库的历史记录,http://blog.hartwork.org/?p=763来自http://blog.hartwork.org/?p=763是一个很好的工具,用于在将SVN存储库迁移到Git时调查它的历史记录 .


    尽管 git-svn 或nirvdrum svn2git 更容易入手,但除了灵活性之外,使用KDE svn2git 而不是 git-svn 的原因还有其他原因:

    • 历史由 svn2git 重建得更好更清洁(如果使用了正确的历史),对于具有分支和合并的更复杂历史尤其如此等等

    • 标签是真正的标签而不是Git中的分支

    • with git-svn 标签包含一个额外的空提交,这也使它们不属于分支,因此正常的 fetch 将不会得到它们,直到你给命令 --tags ,因为默认情况下只提取指向读取分支的标签 . 适当的svn2git标签是它们所属的地方

    • 如果您在SVN中更改了布局,可以使用 svn2git 轻松配置它,使用 git-svn 最终会丢失历史记录

    • with svn2git 您还可以拆分一个SVN存储库很容易进入多个Git存储库

    • 或将同一SVN根目录中的多个SVN存储库轻松组合到一个Git存储库中

    • 使用正确 svn2git 比使用 git-svn 快转换数倍

    你看,有很多原因导致 git-svn 更糟,而且KDE svn2git 更优越 . :-)

相关问题