我可以在本地使用Mercurial,并从/推送到Subversion存储库吗?

9
作为一名自由职业者,我经常在使用Subversion存储库的公司工作。如果我能够使用Mercurial从这些存储库中获取代码,在离线时跟踪我的更改,然后在重新联网时将所有本地更改提交到公司的Subversion服务器上,那将非常方便。这种方法可行吗?你有没有阅读过任何关于具体操作的好教程?

类似的问题可以在这里找到:https://dev59.com/EXRA5IYBdhLWcg3w2x6W。我认为我的问题也应该留下来; 这是那种可以用很多不同方式表达的问题之一。 - Paul D. Waite
还有这一个: https://dev59.com/i3RA5IYBdhLWcg3wyRF6 - Paul D. Waite
这里是关于Kiln Overflow的同样问题,或者叫什么名字:http://kiln.stackexchange.com/questions/948/can-i-use-mercurial-locally-and-update-from-push-to-a-subversion-repository/950#950 - Paul D. Waite
3个回答

8

我在一家使用CVS的公司工作,所以HgSubversion不是一个选择。几天前我也有同样的问题,并基于此开发了一个工作流程:

http://momentaryfascinations.com/programming/how.to.use.mercurial.for.local.source.code.management.with.a.public.subversion.server.html

我创建了一个 Mercurial 仓库,它位于我的 CVS 仓库旁边,我将其视为“只读”。然后,我将此“只读”hg repo 克隆到工作仓库中,在那里进行本地更改/修复。我一直在为我所做的每个功能和修复克隆存储库,但您也可以只有一个存储库,并使用不同的分支策略来管理开发。这里是这些策略的良好概述
这种工作流程的关键在于拥有那个“只读”存储库。我曾经在我创建的第一个 Mercurial 存储库中进行更改,该存储库位于 CVS 之上。这个方法可行,但当从 CVS 更新时会变得混乱。通过拥有这个额外的层,您可以单独处理自己的更改并从 CVS 进行更新。
与 CVS 保持同步
每当 CVS 中有更改时,我都会执行 cvs update。对于“只读”hg存储库,这将显示为已修改文件。要将 Mercurial 与其同步,我只需执行
hg ci -m "Updated from CVS."

(因此,在我的hg日志中,您会看到很多这样的消息)。此时,我的“readonly”存储库已与CVS同步。现在,我可以转到任何一个克隆的存储库,并发出hg pull,然后hg update以将它们同步。

将更改从hg提交回CVS

相反地,当我想要提交到CVS时,我将进入其中一个我已经将更改提交到hg的工作存储库。然后,我将我的更改hg push回“readonly”,跳到“readonly”存储库,执行hg update。从CVS的角度来看,这将显示为新修改。然后我会使用cvs commit将其提交回CVS。在此处,我必须在我的日志消息中重复/总结我在hg存储库中完成的工作。

承认,在这个工作流程中还存在一些问题。您可能会在hg中进行多个更改,这些更改累加到CVS / SVN中只有一个更改,因此历史记录将不会保留在CVS / SVN中,并且您需要总结提交消息。您必须手动管理使CVS和“只读”存储库保持同步。优点是您不需要安装任何其他扩展程序-您只需从两个方面处理文件本身。正在发生的一切都非常透明且在您的控制之下。
我仍在学习hg,但到目前为止,这个工作流程已经相当不错了。 Harvey提供了一个漂亮的图表,并提出了一个很好的观点,即这个工作流程适用于任何其他版本控制系统: alt text
(来源:sr105.com

3
@bentsai说:这是一个很好的解释,介绍如何使用Mercurial与*任何其他版本控制系统进行基本交互,对于顾问非常有用。但需要一张图表来说明。 - Harvey
2
你可以在你的回答中加入以下图示:http://sr105.com/other_vcs_to_hg_workflow.png - Harvey
我能看到这种方法唯一的问题是你在Mercurial仓库中没有CVS历史记录,所以当回顾更改时必须小心。尽管在许多情况下这可能是可以接受的。 - Joe Bane
@Harvey:图表现在是一个损坏的链接,有没有可能更新一下? - Mike McFarland

5
尝试使用HgSubversion。它使您能够做到这一点。您可以将svn存储库(部分)克隆到本地hg存储库,并在本地使用hg,在远程使用svn(推送和拉取的效果符合预期)。我过去曾经成功地使用过它,但并没有深入了解。

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接