问题在于我希望能够使用Mercurial或git作为开发的前端,但在Subversion中进行更改集和更新,通常在集成分支中或仅由Mercurial的脚本,或Hudson注意到更改时的脚本。然后我们的Mercurial存储库会更新其他使用SVN的开发人员所做的更改,我们会在提供新开发版本之前提取更改并集成它们并测试更改等。
有没有人知道以下方案是否可以用于合并和开发团队?分枝?或者,如果有更好的方法......除了强烈武装人们只使用一个工具?
以下策略由以下组件组成:
在下面的配置中,通常会将更新从SVN / trunk拉入克隆(hgsubversion)。克隆将是只读的,并定期有一个可以进行更改的脚本。然后将克隆克隆到开发存储库中,该存储库是可读写的(它是常规的Mercurial Repo)。当开发人员将更改推送到此开发人员存储库时,驻留在Integration分支中的元素将被推送到SVN /集成分支。此分支仅由自动脚本提交。如果使用svn的其他开发人员只将更改推送到SVN的主干,则可以将它们拉入克隆并在Mercurial的环境中合并。缺点是你会失去SVN级别的可见性。
[[[[ trunk [[[[[[[[[[[[[[[[[[[[[[[[ SVN ]]]]]]]]]]]] branch/integration ]]]]]]]]]]]]]]]]]]
| ^
| |
| |
v |
SVN - Mercurial Clone |
| |
| |
| |
v |
Mercurial - Development ---------------------------- Branch - Integration
答案 0 :(得分:3)
在使用DVCS的课程中,这实际上是我解释的主要用例之一,而且我认为其中有一个显示了令人敬畏的DVCS ... ...
你有几种方法可以做到。
你 SVN / checkout 代码,然后 Hg / init 和 Hg / commit 一切。然后,您可以在Hg下工作,提交小而频繁的原子修改,本地。当您想要提交回SVN时,首先 Hg / up 到您在SVN /结账后立即进行的Hg修订。您 SVN / up ,将不存在SVN冲突,因为您刚刚从普通SVN版本更新。您 Hg / commit , Hg / merge ,然后 SVN / commit 。如果有人同时在SVN中提交,则重复操作: Hg / up 到最后一个干净的SVN版本, SVN / up 和 Hg / commit + merge < /强>
您跟踪最后一个SVN干净版本的方式取决于您。您可以使用每次更改的标记,将SVN修订保留在分支或单独的存储库中。的 TIMTOWTDI 强>
增加了好处:这也是一种为使用Hg的用户提供SVN提交者的方式,而不受外部版本控制。
我从未使用过这种方式,但tailor可以反复进行SVN / Hg双向转换。