桥接svn和git回购

时间:2015-08-20 07:02:29

标签: git svn version-control git-svn

我们有两个团队:内部团队在办公室后面使用内部svn代理;外部团队在开放的互联网上使用git并希望合作但无法访问内部svn。内部团队必须保留在svn上,办公室网络不允许外部访问。

问题是:办公室团队如何将他们的svn变更转发给外部团队的git repo并从git repo返回到svn?

在办公室里,我们非常成功地使用了git svn,因此所有本地开发都在git上,从/向svn提取和提交。但是,我们无法弄清楚如何链接远程仓库,以便我们可以执行以下操作:

git checkout gitmaster
git merge svntrunk
git push
git checkout svntrunk
git svn fetch
git merge gitmaster
git svn dcommit

3 个答案:

答案 0 :(得分:1)

Git-svn适用于单个用户,具有subversion的git接口,在git-svn克隆上进行协作最终会失败(即git-svn在从subversion获取更新时使用reabse并在当时使用当前用户作为作者)推动“承诺颠覆”。

您可以使用诸如SubGit,SmartGit或https://github.com/mrts/git-svn-bridge之类的新建应用程序解决问题

答案 1 :(得分:0)

由于您的内部团队可以使用外部git仓库,因此您可以将其设置为邮件开发存储库,并不时将压缩提交转储到svn。这假设您不会从svn端进行更改,并且会因技术原因(部署/发布)而保留更改。另一方面,如果你无法避免来自svn端的更改,使用git-svn保持与git-svn的同步可能很快成为一项重大任务,你可能想要检查@joran建议的其他选项

答案 2 :(得分:0)

所以,这是我在过去两周内成功使用并成功使用的内容:

  1. 使用git svn克隆svn trunk。这创建了主一个名为git-svn的分支。
  2. 创建了分支机构git-trunk off master并将存储库复制到远程git主机。
  3. 将遥控器添加为my-git-remote。
  4. 使用git branch --set-upstream-to my-git-remote将git-trunk设置为上游。
  5. 现在将svn trunk同步到git-trunk我做:

     git svn fetch
     git checkout git-trunk
     git merge git-svn
     git push
    

    并且将git-trunk同步到svn trunk我做:

     git checkout git-trunk
     git svn dcommit
    

    到目前为止工作正常。外部团队在git-trunk上工作并且不担心颠覆,内部团队像往常一样处理颠覆,并且不知道某些提交来自git。我只需要记住偶尔同步更改。

    我现在意识到创建git-trunk分支可能是多余的,可以将git-svn合并到master并且dcommit master。