【问题标题】:SourceForge: Mirror GIT repository to SVNSourceForge:将 GIT 存储库镜像到 SVN
【发布时间】:2011-01-24 00:11:59
【问题描述】:

我有一个使用 GIT 开发的项目。我需要为不喜欢 GIT 的用户创建一个仅 SVN 镜像的存储库。我用谷歌搜索了一些关于它的说明,但都失败了。其中一部分是为 Linux 编写的——我有 Windows。他们中的一部分建议创建空存储库,然后将其与主 GIT 存储库同步——这并不是我真正想要的。他们中的一部分简单并没有在不同阶段失败并带有神秘消息。所以我决定在这里问。我深入研究了 git-svn 命令描述,不顾一切地试图让这个东西自己工作。我也失败了。 Github svn export 太不稳定,无法依赖。现在我请你帮忙。

所以,这里的任务。

  1. 我有本地 GIT 存储库,其中包含许多链接的遥控器(我自己的存储库、sf.net、github 等)。
  2. 我想从我的本地存储库中创建一个支持 SVN 的 GIT 存储库来镜像我的开发。
  3. SVN 存储库将是只读镜像。如果 SVN 保留更改历史记录会很好,但如果这是不可能的 - 我没有打扰。
  4. 只应将一个分支镜像到 SVN。它可以是 master 分支或任何其他专门用于镜像的分支 - 不会打扰 ether。
  5. SVN 将驻留在 SourceForge 上。

有没有可能让这件事真正发挥作用?

【问题讨论】:

  • 如果人们会为双方做出承诺,看在上帝的份上,不要这样做。我试图为 web2project 协调这个八个月。 一个 糟糕的 rebase 把我们从水中吹走了,git-svn 想要重新同步 8 个月以上(500 多次提交)。我终于放弃了,只是手动合并了 repo 中的东西……这样耗时少,痛苦少,而且我不太可能伤害别人。
  • SVN 存储库将是一个只读镜像
  • 向双方提交对 git-svn 来说是个大问题,因为 git-svn 在设计上不支持对存储库的并发访问。请参阅我对 SubGit 的评论:从第一天起,该工具就被开发为双向 Git-SVN 桥。当 Subversion 和 Git 存储库都保持可写时,它可以很好地应对。
  • 有一个相关的feature request 在 SourceForge 实现 git-to-svn 桥,但它没有足够的票数来实现。

标签: svn git sourceforge


【解决方案1】:

我认为SubGit 是要走的路。

问题在于 SubGit 将自己的钩子直接安装到 Subversion 和 Git 存储库中。所以,我怀疑是否可以为托管服务提供商设置它,比如 sourceforge 或谷歌代码。

如果您创建自己的 Subversion 存储库,使用 SubGit 设置甚至读写镜像也不是什么大问题:

  1. 创建 Subversion 存储库:

    $ svnadmin create $SVN_REPO
    
  2. 克隆 Git 存储库:

    $ git clone --mirror $GIT_REMOTE_REPO $GIT_REPO
    
  3. 配置 SubGit:

    $ subgit configure $SVN_REPO
    
  4. 调整SubGit配置文件:

    # Specify 'git.default.repository = $GIT_REPO'
    #     at $SVN_REPO/conf/subgit.conf
    
  5. 添加作者映射:

    # Add all the authors as
    # svnauthor = Git Author <git.author@company.com>
    #     into $SVN_REPO/conf/authors.txt
    
  6. 将 SubGit 安装到 Subversion 存储库中:

    subgit install $SVN_REPO
    

安装完成后,您可以克隆 $GIT_REPO 作为另一个远程并推送到此存储库以将所有提交转换为 Subversion 存储库。

可以将更改提交到 Subversion 存储库,SubGit 会自动将它们转换为 Git 提交,因此您可以取回它们。

SubGit 是一个商业项目,但它对开源项目是免费的。更多详情请参考SubGit documenationgit-svn对比。

【讨论】:

    【解决方案2】:

    git svn initgit svn clone 旨在连接到现有的 SVN 存储库,所以我建议如下。

    1. 设置一个空的 SVN 存储库
    2. 使用svn git clone 设置新的 git 存储库
    3. 将本地 git 存储库拉到新的存储库中
    4. 为您要与 SVN 存储库共享的分支创建 git svn dcommit

    另一种完全不同的方法是在同一个工作文件上使用 git 和 SVN。您只需确保分别忽略 .git 和 .svn 目录。然后你对 git 使用 git 命令,对 SVN 使用 SVN 命令。

    当然,使用这种方法,您必须手动同步您希望在两个存储库中进行的每个提交,但如果您不希望在两个存储库中都有所有提交,这可能就足够了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-14
      • 1970-01-01
      • 2011-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多