【问题标题】:possible to recreate svn repository from (full) git-svn clone?可以从(完整)git-svn 克隆重新创建 svn 存储库吗?
【发布时间】:2012-11-08 07:54:13
【问题描述】:

作为标题,有没有什么方法可以使用 git-svn(包含从 r1 开始的每个提交)从完整克隆中重建 svn 存储库?

编辑:

我可能应该补充一点,我正在寻找一种实用的方法来做到这一点(接近完美的副本是可以的,只要它像原始 svn 存储库一样仍然可用)

【问题讨论】:

    标签: git svn git-svn


    【解决方案1】:

    是的,可以创建一个非常靠近 git-svn 存储库的 SVN 存储库(甚至可以从 Git 合并提交中恢复 svn:mergeinfo,从 .gitignore 中恢复 svn:ignore)。这样做的步骤:

    1.准备分支和标签:

    为每个 refs/remotes/* 创建 refs/heads/*(当前的 refs/heads/* 位置将丢失):

    $ git branch -a | awk '/remotes\/([^\/])+$/{ref=substr($1, 9); system("git update-ref refs/heads/" ref " refs/remotes/" ref )}'
    

    或者您可以手动为所有有趣的分支设置 refs/heads/*

    请注意,refs/heads/master 映射到 SVN 主干,但上面的脚本会将 refs/heads/trunk 设置为 refs/remotes/trunk。所以在运行它之后,应该将 refs/heads/master 设置为 refs/remotes/trunk 并删除 refs/heads/trunk:

    $ git update-ref refs/heads/master refs/remotes/trunk
    $ git branch --delete refs/heads/trunk
    

    标签也一样:将 refs/tags/* 设置为 refs/remotes/tags/* 位置:

    $ git branch -a | awk '/remotes\/tags\/([^\/])+$/{ref=substr($1, 14); system("git update-ref refs/tags/" ref " refs/remotes/tags/" ref )}'
    

    检查所有 refs/remotes/* 和 refs/remotes/tags/* 是否都转换为 refs/heads/* 和 refs/tags/*,因为只有这些引用会被转换。

    2.创建一个空的SVN仓库

    $ svnadmin path/for/svn/repository
    

    3.创建一个包含在步骤 1 中准备的 refs/heads/* 和 refs/tags/* 的裸 Git 存储库:

    $ git clone --bare path/to/git-svn/repository path/for/svn/repository/.git
    

    4. 使用此link 下载并安装 SubGit(从 Git 中删除“git-svn-id:”签名的中间版本会在转换时提交消息)。一般来说,SubGit 不是免费的,但对于一次性转换(您的情况),它可以免费使用。使用 SubGit 转换存储库(它希望在 path/for/svn/repository/.git 找到 Git 存储库)

    $ subgit install path/for/svn/repository
    

    5.SubGit 安装后,Git 和 SVN 存储库将保持同步。可选择中断双向同步(您可以随时启用它),运行

    $ subgit uninstall path/for/svn/repository
    

    【讨论】:

      【解决方案2】:

      理论上,可能重新创建一个非常接近原始 Subversion 存储库的存储库。但是,git-svn 没有克隆 Subversion 存储库数据的某些方面(例如属性和合并信息)。因此,您不一定能够重新创建原件的精确副本。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-28
        • 1970-01-01
        • 2011-04-14
        • 2011-10-16
        • 1970-01-01
        相关资源
        最近更新 更多