git svn clone - 如何将 Subversion 远程转换为 Git 本地 (Windows)

git svn clone - How to convert Subversion remotes to Git locals (Windows)

我已尝试按照 official Git instructions 如何将项目从 Subversion 一次性、单向迁移到 Git。我尝试了几次,选项略有不同,但没有得到预期的结果。

说明建议在导入过程完成后,导入的 Subversion 标签和分支应该出现在新创建的本地 Git 仓库中:

my-new-local-git-repo\.git\refs\remotes

但 Subversion tags/branches 实际上存在于此:

my-new-local-git-repo\.git\svn\refs\remotes\origin

我怀疑这就是 post-导入清理说明对我不起作用的原因。我不知道是我在执行导入时使用的 command/options 中的错误,说明是否已过时,或者我是否在其他地方犯了错误。

这是我用来创建此 Subversion-to-Git 迁移的 repo 的命令:

git svn clone --stdlayout --authors-file=users.txt http://svn/repo/root/MyProjectInSVN/ new-local-git-repo

以下是生成的本地 Git 回购远程引用的一些屏幕截图:

任何关于如何将这些导入的 Subversion 远程分支和标签转换为本地 Git 分支和标签的建议都将不胜感激!

Git 使用 two 位置来存储 refs(即分支,标签,......):首先它将每个 ref 作为单独的文件存储在 .git/refs.一段时间后 and/or 如果积累了很多 refs git pack-refs 将当前状态打包到 一个 文件 .git/packed-refs 中。 git pack-refsgit gc 调用,后者又由某些 git 命令自动执行。

所以 .git/refs 不包含您的分支不是错误。获取所有 refs 的最终命令是 git for-each-ref.

git svn 确实在 git/svn 中存储了 额外的 数据,但不存储 refs 本身。

如果 post- 处理不起作用,我假设 refs 的模式不匹配。因此,将 git for-each-ref 的输出与命令中的字符串进行比较:refs/remotes/tagsrefs/remotes.