1

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

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

  1. 最初将我们当前的 SVN 存储库克隆到 Mercurial 中,将其放到某个服务器上并提供给团队成员(hg serve第一次)
  2. 团队成员开始只使用 Mercural,没有直接的 SVN 提交、更新和签出。仅向/从根 Mercurial 存储库推/拉(在步骤 1 中设置)。
  3. 最终(一些 cron 工作?)我们的 Mercurial 存储库被同步到旧的 SVN 服务器,以允许其他团队访问我们的工作。

我想知道是否有可能进行这种设置?我已经阅读了这篇关于 HgSubversion 扩展的文章,但它不能给我第三步 - 上游同步到 SVN,然后对 Mercurial 的更改来自远程团队成员。

4

2 回答 2

1

正如您所发现的,HgSubversion 的主要限制是您需要在将 Mercurial 历史推送到 Subversion 时对其进行线性化。这意味着您的 Mercurial 历史中不能有分支,因此很难作为一个团队一起工作。

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

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

Alice 和 Bob 在推送它们之前已经重新调整了他们的变更集。当你与 Subversion 同步时,你会得到:

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

并且 HgSubversion 现在会将 Mercurial 变更集重新设置为[r12]

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

爱丽丝和鲍勃仍然拥有没有素数的原始未重新设置的变更集。因此,他们需要在从团队 Mercurial 服务器中提取之前进行剥离。这样的工作流程需要非常小心才能完成。

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

在上面的示例中,SVN 服务器将从 中获取r13Mercurial 存储库的状态b3。该r13修订将很大:它包含a1b3. 如果仍在使用 Subversion 的人想要查看单个更改,那么他们将不得不查看 Mercurial 服务器 - 我们放入 Subversion 的提交消息具有指向hgwebMercurial 中单个更改集的链接,因此很容易跳转到那里。

于 2012-02-28T13:00:29.673 回答
0

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

是的,但在不太明显的情况下可能会遇到一些麻烦,这不会透明(自动)从 hg 转换为 svn

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

hg push,在路径部分使用 svn-repo。但见上文,它并不总是有效,可能需要在推送前手动变基

于 2012-02-28T10:18:22.917 回答