【发布时间】:2021-09-24 07:01:02
【问题描述】:
我有一个 SVN 存储库,在 2018 年的某个时候部分迁移到了 GIT(Bitbucket)。 SVN 和 GIT 存储库都在使用中。在 SVN 方面,主要是旧项目的分支。 GIT 存储库用于主干/主控开发。 现在我被要求将剩余的分支从 SVN 迁移到 GIT。问题是我不知道原始转换是如何完成的(完成此操作的人离开了公司)。我可以轻松地将 SVN 存储库转换为 GIT,但我永远无法使其处于提交 ID 实际匹配的状态。 目前,让我最接近的方法似乎是
git svn clone -T trunk URL --no-minimize-url --no-metadata -r1:10 --preserve-empty-dirs
我只在几个版本中使用了 -r,所以它更快。 作者实际上收到了相同的电子邮件(name@UUID),并且 UUID 与 2018 年转换的 git repo 匹配。 问题似乎是 SVN 历史记录以 2 个仅包含文件夹和提交消息的提交开始 - 这些提交对我来说被忽略了,但不知何故,对于较旧的迁移,它们导致 git 提交只包含消息。
例子:
svn
commit A: create dir 1
commit B: create dir 2
commit C: create some files in dir 1 and 2
原始 git 迁移结果:
commit A: commit message only
commit B: commit message only
commit C: create some files in dir 1 and 2
我目前使用 git svn 的努力:
commit C: create some files in dir 1 and 2
尝试使用 SubGit:
subgit import --trunk trunk --username user --svn-url URL)
commit A: commit message only (modified with notes)
commit B: commit message only (modified with notes)
commit C: create some files in dir 1 and 2 (commit message modified with notes)
关于 SubGit 的注释 - 这种方法非常接近(基于文档,我很确定我可以修复提交消息)。 对我来说问题是,如果我不提供作者文件而不是以“user@uuid”结尾,我最终会以“user@localdomain”结尾。 可能的解决方法是提供从原始迁移中导出作者并将其作为作者文件提供?
有人对如何做到这一点有任何建议吗? 如果我无法在 git 端获得相同的提交 id,如果我能找到共同的祖先(即使 id 不匹配),是否有一些“合并”两个 git repos 的理智方法?
【问题讨论】: