桥接 svn 和 git 回购

bridging svn and git repos

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

问题:office 团队如何将他们的 svn 更改转发到外部团队的 git 存储库并从 git 存储库返回到 svn?

在办公室里,我们非常成功地使用了 git svn,因此所有本地开发都在 git 上,通过获取和提交 from/to svn。但是我们不太清楚如何 link 一个远程仓库,所以我们可以做类似的事情:

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

Git-svn 适用于具有 git 颠覆接口的单个​​用户,在 git-svn 克隆上协作最终会失败(即 git-svn 在从 subversion 获取更新时使用 reabse 并在 "pushing" 提交回 subversion 时使用当前用户作为作者)。

您可以使用 SubGit、SmartGit 或 https://github.com/mrts/git-svn-bridge

等桥接应用程序解决问题

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

下面是我在过去 2 周内确定并成功使用的内容:

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

现在将 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。