【问题标题】: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 documenation和git-svn对比。

【讨论】:

    【解决方案2】:

    git svn init 或 git 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
      相关资源
      最近更新 更多