2012-02-28 60 views
1

我现在使用SVN的公司工作。这里有很多团队都有他们自己的工作库。这些存储库有时互相依赖(使用svn:external),例如一些使用核心团队回购的最终用户项目等等。与SVN备份的远程Mercurial回购团队合作

我想从我的团队从SVN转移到Mercurial。我想设置的工作流程是这样

  1. 最初克隆我们目前SVN回购成水银,把它的一些服务器,并为它服务团队成员(与hg serve第一时间)
  2. 团队成员开始工作只有Mercural,没有直接的SVN提交,更新和签出。只推/拉根Mercurial repo(在步骤1中设置)。
  3. 最终(某些cron工作?)我们的Mercurial repo与旧的SVN服务器同步,以允许其他团队访问我们的工作。

我想知道有没有可能做这样设置的? 我已经阅读HgSubversion扩展this的文章,但它不能给我第三步 - 含汞从远程团队成员来到上游同步到SVN,然后改变。

回答

1

之前手动调整基线正如你所发现,与HgSubversion主要的限制是,你需要它推到Subversion时,你的线性历史水银。这意味着您的Mercurial历史中不能有分支机构,因此作为一个团队很难一起工作。

此外,当您推送Mercurial变更集时,HgSubversion将执行变更。想象一下,在推送到团队Mercurial服务器之前,您的团队会谨慎地重新设置他们的本地提交。善变的历史是这样的:

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

其中Alice和Bob都推在他们面前重建基础的变更。当你使用Subversion同步你:

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

和HgSubversion现在变基上的[r12]顶部的水银的变更:

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

Alice和Bob还有没有质数原始未重建基础的变更。所以他们需要在他们从团队Mercurial服务器拉出之前剥离。这样的工作流程需要很多的关注。

我曾经为客户端设置过一个更简单的工作流程:我们只是将当前版本的文件提交给Subversion,而不是在Subversion修订版上重新定位Mercurial变更集。这意味着我们不会保留 Subversion版本库中完整的Mercurial历史记录。另一方面,我们可以很容易地处理合并和什么。

在上面的例子中,SVN服务器将得到一个r13,Mercurial存储库的状态从b3r13修订版将会很大:它包含在a1b3之间所做的所有更改。如果仍然使用Subversion的人希望看到个别更改,那么他们必须查看Mercurial服务器 - 我们放入Subversion的提交消息已链接到Mercurial的hgweb中的单个更改集,因此很容易跳到那里。

+0

是的,我同意。 HgSubversion工作流程不适合团队(即使对于个人来说也不太舒服)。如果SVN丢失了提交历史记录并不令人反感,最好将快照提交给SVN(例如,在cron作业或每次推送代码时)。 – 2012-02-28 15:15:38

+0

Martin,Laurens - 是的,在转移到Mercurial之后放弃SVN中的提交历史记录是可以接受的。我认为这个解决方案(批量SVN提交)适合我的情况。 – Olegas 2012-02-29 06:09:12

0

我想知道有没有可能做这样设置的?

是的,但可以具有在不那么明显-箱子从汞转化为svn的

上游同步至SVN然后改变到水银一些麻烦,这不透明(和自动地)来自远程团队成员

hg push,带有svn-repo的路径段。但是,见上面,它会工作始终,并可能需要推