【问题标题】:git svn clone - How to convert Subversion remotes to Git locals (Windows)git svn clone - 如何将 Subversion 远程转换为 Git 本地 (Windows)
【发布时间】:2019-02-01 14:56:20
【问题描述】:

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

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

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

但 Subversion 标签/分支实际上存在于此处:

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

我怀疑这就是为什么导入后清理说明对我不起作用的原因。我不知道我在执行导入时使用的命令/选项是否有错误,指令是否已过时,或者我在其他地方是否有错误。

这是我用来创建这个从 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 svn git-svn


    【解决方案1】:

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

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

    git svn 确实在git/svn 中存储附加数据,但不存储参考本身。

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

    【讨论】:

    • 非常感谢您对打包参考如何工作的完整解释!我在以前的迁移尝试中使用了git for-each-ref,但在这些情况下,我对提供给git svn clone 的一些选项犯了错误,并且迁移后命令不起作用。我的最后一次迁移尝试实际上运行良好,但我没有运行迁移后命令,因为我被丢失的.git/refs 所牵制。您对 git for-each-ref 是迭代 refs 的最终命令的解释是这个难题的缺失部分!
    猜你喜欢
    • 2021-10-06
    • 1970-01-01
    • 2012-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多