2011-10-15 75 views
7

在工作中,我们目前使用Subversion for SCM。我建立了一个本地git-svn镜像,并将其用作我的主要开发工作空间。我现在对基本功能感到满意。团队中的其他开发人员也希望转移到Git,因此我们正在考虑使用svn存储库的git镜像。我还想和Gerrit一起尝试这个练习。使用Subversion版本库的Git镜像设置Gerrit

我想象的设置是沿着这些路线的东西:

  1. 一个Git镜的svn库。这个主分支与svn上的主干同步。

  2. 对于每个功能都创建主题分支。这与发生审查的Gerrit有关。一旦变更集被批准,Gerrit将主题分支后台主合并。

  3. 一个gitweb或类似的web应用程序在浏览器上查看存储库。

  4. 一个类似的过程,其他分支在颠覆以外的主干。

本质上,我想要的是我只与我的本地git克隆和Gerrit webapp交互;将审查过的变化推回到svn应该会自动发生。我该如何设置类似的东西?

+0

谁会处理将变更推回到Subversion时发生的冲突? –

+0

@Greg Hewgill Ahem,我假设当Gerrit尝试将更改合并到主分支时,它应该失败。 :-) –

+0

嘿,我试图做类似的事情,尽管我只需要备份我的git分支而不必将它们转换为SVN分支。非常困惑,反复询问我的密码'git push',直到我注意到我忘记在服务器引用的开始处放置ssh://! –

回答

2

有可能设置一个Git一面镜子,在同步与存储库SVN

安装SubGit到你的SVN仓库:

$ subgit install path/to/svn/repository 

然后,只需设置访问创建链接的Git仓库(路径/到/ svn/repository/.git)使用Apache或其他。对Git存储库的每次推送都将被转换为SVN修订版本,反之亦然。

所以你可以在Gerrit和你团队中使用链接的Git仓库(就像SVN从不存在一样)。之后,你可以关闭SVN仓库(或继续使用)。在关闭运行之前停止同步:

$ subgit uninstall path/to/svn/repository 
6

不幸的是,不可能自动完成这一切(至少不是没有很多工作)。这里有一些步骤,可以让你接近:

  1. 设置您的git克隆格里特服务器
  2. 创建SVN钩或周期性的任务,它从SVN获取并推送至git克隆上
  3. 格里特有一个内置的GitWeb的版本,所以你有覆盖
  4. 在格里特服务器,创建change merged hook当第4步失败的事情西港岛线,这将推动回SVN

像格雷格上面提到的,我很棘手。您必须重置Gerrit中的git存储库以匹配svn并重新提交您的更改。如果/当你说服其他团队放弃svn并使用git/Gerrit时,这将会容易得多:-)

祝你好运!