SourceForge: 将GIT仓库镜像到SVN

4
我有一个使用GIT开发的项目。我需要为那些不喜欢GIT的用户创建一个仅限SVN存储库。我在谷歌上搜到了一些关于此的指示,但它们都失败了。其中一部分适用于Linux - 我用的是Windows。其中一部分建议创建空仓库,然后将其与主GIT仓库同步 - 这不是我想要的。其中一些根本就无法工作,并在不同阶段失败并显示出难以理解的消息。所以我决定在这里问问。我绝望地研究了git-svn命令说明, 试图自己让这个东西工作,但我也失败了。Github svn export 太不稳定了,不能依赖它。现在我请求您的帮助。
因此,任务如下:
  1. 我有一个本地的GIT仓库,其中有很多链接的远程仓库(我的仓库,sf.net,github等)。
  2. 我想从我的本地仓库创建一个SVN感知的GIT仓库,以镜像我的开发。
  3. SVN存储库将是只读镜像。如果SVN保留更改历史记录,那就太好了,但如果不可能 - 我也不会介意。
  4. 只有一个分支应该被镜像到SVN。它可以是主分支或任何其他专门用于镜像的分支 - 我也不会介意。
  5. SVN将驻留在SourceForge上。
这个东西真的能实现吗?

7
如果人们想要在两个方面都承诺,请求求你不要这样做。我曾经试图为 web2project 协调了八个月。但是一次糟糕的 rebase 让我们彻底失败了,git-svn 要重新同步 8 个多月(500+ 次提交)的内容。最后我放弃了,只好手动合并整个代码库……虽然比较费时、比较痛苦,但至少不会伤害任何人。 - CaseySoftware
2
SVN代码库将是只读镜像。 - supernova.ws
对于git-svn来说,双向提交是一个巨大的问题,因为git-svn从设计上不支持并发访问存储库。请参阅我的有关SubGit的评论:从第一天开始,该工具就被开发为双向Git-SVN桥梁。当Subversion和Git存储库保持可写时,它可以很好地处理。 - vadishev
有一个相关的功能请求在SourceForge上实现git-to-svn桥接,但它没有足够的投票来符合实施条件。 - AntonK
@vadishev 实际上这是git的问题/特性,由于DVCS的本质,无法在两端同时锁定。而svn可以在同步的某一时刻被锁定,因为它具有集中化的本质。这既是一个问题,也是一个特性。 - Andry
2个回答

1

我认为SubGit是最好的选择。

问题在于SubGit会将自己的钩子安装到Subversion和Git存储库中。因此,我怀疑在像sourceforge或google code这样的托管提供商上设置可能是不可能的。

如果您创建自己的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配置文件:

    # 在$SVN_REPO/conf/subgit.conf中指定'git.default.repository = $GIT_REPO'
    
  5. 添加作者映射:

    # 将所有作者添加为
    # svnauthor = Git Author <git.author@company.com>
    #     到$SVN_REPO/conf/authors.txt
    
  6. 将SubGit安装到Subversion仓库中:

    subgit install $SVN_REPO
    
安装完成后,您可以将$GIT_REPO克隆为另一个远程库,并将其推送到此存储库,以便将所有提交转换为Subversion存储库。
您可以将更改提交到Subversion存储库,SubGit会自动将它们转换为Git提交,因此您可以将它们取回。
SubGit是一个商业项目,但对于开源项目是免费的。有关更多详细信息,请参阅SubGit文档git-svn比较。

0

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操作。

当然,采用这种方法,您必须手动同步每个提交,以便在两个存储库中都有所需的更改。但是,如果您不介意在两个存储库中都拥有所有提交,则此方法可能已经足够了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接