团队使用由SVN备份的远程Mercurial仓库

时间:2012-02-28 09:34:12

标签: svn mercurial workflow hgsubversion

我现在正在使用SVN的公司。这里有许多团队为他们正在进行的项目拥有自己的存储库。这些存储库有时相互依赖(使用svn:external),例如:一些使用核心团队回购等的最终用户项目。

我想和我的团队一起从SVN转到Mercurial。我希望像这样设置工作流程

  1. 最初将我们当前的SVN repo克隆到Mercurial中,将其放入某个服务器并将其提供给团队成员(第一次使用hg serve
  2. 团队成员开始只使用Mercural,没有直接SVN提交,更新,结帐。只推/拉到根Mercurial repo(在步骤1中设置。)。
  3. 最终(一些cron工作?)我们的Mercurial仓库被同步到旧的SVN服务器,以允许其他团队访问我们的工作。
  4. 我想知道是否有可能做这种设置? 我已经阅读了有关HgSubversion扩展的this文章,但它不能给我第三步 - 上游同步到SVN然后更改为Mercurial来自远程团队成员。

2 个答案:

答案 0 :(得分:1)

正如您所知,HgSubversion的主要限制是您需要在将其推送到Subversion时线性化Mercurial历史记录。这意味着您不能在Mercurial历史记录中拥有分支,因此很难团队合作。

此外,当您推送Mercurial变更集时,HgSubversion将执行 rebase 。想象一下,在推送到团队Mercurial服务器之前,您的团队会小心地重新定位他们的本地提交。 Mercurial历史如下:

... r10 --- a1 --- a2 --- b1 --- b2 --- b3

Alice和Bob在推送它们之前已经改变了他们的变更集。当您与Subversion同步时,您将获得:

... r10 --- a1 --- a2 --- b1 --- b2 --- b3
       \
        r11 --- r12

和HgSubversion现在将在[r12]之上重新定义Mercurial变更集:

... r10 --- r11 --- r12 --- a1' --- a2' --- b1' --- b2' --- b3'

爱丽丝和鲍勃仍然拥有没有素数的原始未重新定位的变更集。所以他们需要在从Mercurial服务器团队中撤出之前剥离。这样的工作流程需要非常小心才能完成。

我曾经为客户端设置了一个更简单的工作流程:我们只是在Subversion修订版之上重新设置Mercurial变更集,我们只是将当前版本的文件提交给Subversion。这意味着我们不保留 Subversion存储库中的完整Mercurial历史记录。另一方面,我们可以轻松处理合并等等。

在上面的示例中,SVN服务器将从r13获得具有Mercurial存储库状态的b3r13修订版很重要:它包含a1b3所做的所有更改。如果仍然使用Subversion的人想要查看个别更改,那么他们必须查看Mercurial服务器 - 我们在Subversion中提交的提交消息已链接到hgweb中针对Mercurial的各个更改集,因此它是很容易跳到那里。

答案 1 :(得分:0)

  

我想知道是否有可能进行这种设置?

是的,但在不那么明显的情况下会有一些麻烦,这些情况不会透明地(并自动地)从hg转换为svn

  

上游同步到SVN然后更改为Mercurial来自远程团队成员

hg push,在path-section中使用svn-repo。但是,请参阅上文,总是可以工作,并且在推送之前可能需要手动更改