我现在正在使用SVN的公司。这里有许多团队为他们正在进行的项目拥有自己的存储库。这些存储库有时相互依赖(使用svn:external),例如:一些使用核心团队回购等的最终用户项目。
我想和我的团队一起从SVN转到Mercurial。我希望像这样设置工作流程
hg serve
)我想知道是否有可能做这种设置? 我已经阅读了有关HgSubversion扩展的this文章,但它不能给我第三步 - 上游同步到SVN然后更改为Mercurial来自远程团队成员。
答案 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存储库状态的b3
。 r13
修订版很重要:它包含a1
到b3
所做的所有更改。如果仍然使用Subversion的人想要查看个别更改,那么他们必须查看Mercurial服务器 - 我们在Subversion中提交的提交消息已链接到hgweb
中针对Mercurial的各个更改集,因此它是很容易跳到那里。
答案 1 :(得分:0)
我想知道是否有可能进行这种设置?
是的,但在不那么明显的情况下会有一些麻烦,这些情况不会透明地(并自动地)从hg转换为svn
上游同步到SVN然后更改为Mercurial来自远程团队成员
hg push,在path-section中使用svn-repo。但是,请参阅上文,不总是可以工作,并且在推送之前可能需要手动更改