2

问题是我希望能够使用 Mercurial 或 git 作为开发的前端,但在 Subversion 中进行更改集和更新,通常在集成分支中或仅由脚本写入的内容中Mercurial,或者当 Hudson 注意到变化时。然后我们的 Mercurial 存储库会根据使用 SVN 的其他开发人员所做的更改进行更新,我们将更改拉入并集成它们并在提供新的开发版本之前测试更改等。

有谁知道合并和分支的开发团队是否可能出现以下情况?或者如果有更好的方法......除了强大的武装人员只使用一种工具?

以下策略由以下组件组成:

  • SVN
  • SVN 与 Mercurial 的 1 对 1 克隆
  • Mercurial 开发存储库

在下面的配置中,更新通常会从 SVN/trunk 拉到一个克隆(hgsubversion)中。克隆将是只读的,并且会定期有一个用于更改的脚本。然后克隆将被克隆到一个可读写的开发存储库中(它是一个常规的 Mercurial 存储库)。当开发人员将更改推送到此开发人员存储库时,驻留在集成分支中的元素将被推送到 SVN/集成分支。此分支仅由自动化脚本提交。如果其他使用 svn 的开发人员只将更改推送到 SVN 的主干,他们可以被拉入克隆并合并到 Mercurial 的环境中。不利的一面是,您将失去更改来源的 SVN 级别的可见性。

[[[[ trunk [[[[[[[[[[[[[[[[[[[[[[[[ SVN ]]]]]]]]]]]] branch/integration ]]]]]]]]]]]]]]]]]]
        |                                                   ^
        |                                                   |
        |                                                   |
        v                                                   |
SVN - Mercurial Clone                                       |
        |                                                   |
        |                                                   |
        |                                                   |
        v                                                   |
Mercurial - Development ---------------------------- Branch - Integration
4

1 回答 1

3

在使用 DVCS 的课程中​​,这实际上是我解释的主要用例之一,而且我认为其中一个展示了 DVCS 的真棒……

你有几种方法可以做到这一点。

手动方式

SVN/checkout代码,然后Hg/initHg/commit一切。然后你在 Hg 下做你的工作,在本地做你喜欢的小而频繁的原子修改。当你想提交回 SVN 时,你首先要Hg/up到你刚刚在 SVN/checkout 之后所做的 Hg 修订。你SVN/up不会有 SVN 冲突,因为你刚刚从一个普通的 SVN 版本更新。你Hg/commitHg/merge然后SVN/commit。如果有人同时在 SVN 中提交,你重复操作:Hg/up to last clean SVN revision,SVN/upHg/commit+merge

跟踪最后一次 SVN 干净修订的方式取决于您。您可以使用每次更改的标签,将 SVN 修订保留在分支或单独的存储库中。蒂姆托迪

额外的好处:这也是一种为使用 Hg 的人充当 SVN 提交者的方式,而他们不受版本控制。

自动方式

我从来没有那样用过它,但裁缝能够反复进行两种方式的 SVN/Hg 转换。

于 2011-07-17T22:28:50.067 回答