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

时间:2010-03-23 15:45:50

标签: svn mercurial hgsubversion

作为一名自由职业者,我经常在使用Subversion存储库的公司工作。

如果我可以使用Mercurial从这些存储库中获取代码,在我离线时跟踪我的更改,然后在我重新上线时将所有本地更改提交到公司的Subversion服务器,这将非常方便。

这有用吗?你有没有阅读任何有关细节的好教程?

3 个答案:

答案 0 :(得分:8)

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

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

我在我的CVS存储库中创建了一个Mercurial存储库,我将其视为“只读”。然后我将这个“readonly”hg repo克隆到工作存储库,在那里我在本地进行更改/修复。我一直在克隆每个功能的repo并修复我的内容,但你也可以只有一个repo,并使用不同的分支策略来管理你的开发。这是a good overview这样的策略。

此工作流程的关键是拥有“只读”存储库。我曾经在我创建的第一个Mercurial存储库中进行更改,这是在CVS之上。这很有效,但从CVS更新时却很混乱。通过使用此附加层,您可以单独处理自己的更改和从CVS更新。

与CVS保持同步

每当CVS发生变化时,我都会进行cvs更新。对于“readonly”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提供了一个很好的图表,并指出此工作流程适用于任何其他VCS:

alt text http://sr105.com/other_vcs_to_hg_workflow.png

答案 1 :(得分:5)

试试HgSubversion。它允许你做到这一点。您可以将(部分)svn存储库本地克隆到hg存储库,并在本地和远程svn中使用hg(按下并执行您期望的操作)。

我过去曾使用它取得了一些成功,但没有丰富的经验。

答案 2 :(得分:2)

您可以在此wiki page找到一些信息。