9

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

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

这行得通吗?你读过任何关于细节的好教程吗?

4

3 回答 3

8

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

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

我在我的 CVS 存储库所在的位置创建了一个 Mercurial 存储库,我将其视为“只读”。然后,我将这个“只读”hg 存储库克隆到工作存储库,在那里我在本地进行更改/修复。我一直在为我所做的每个功能和修复程序克隆存储库,但是您也可以只有一个存储库,并使用不同的分支策略来管理您的开发。这是对此类策略的一个很好的概述

此工作流程的关键是拥有“只读”存储库。我曾经在我创建的第一个 Mercurial 存储库中进行更改,该存储库位于 CVS 之上。这行得通,但是从 CVS 更新时它变得混乱。通过拥有这个附加层,您可以分别处理自己的更改和从 CVS 更新。

与 CVS 保持同步

每当 CVS 发生变化时,我都会进行 cvs 更新。对于“只读” hg 存储库,这将显示为修改后的文件。要同步 Mercurial,我只需执行

hg ci -m "Updated from CVS."

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

将 hg 的更改提交回 CVS

换个方向,当我想提交 CVS 时,我将进入我已经将更改提交给 hg 的一个工作存储库。然后我hg push将我的更改恢复为“只读”,跳到“只读”存储库,执行hg update. 从 CVS 的角度来看,这将显示为新修改的。然后我cvs commit回到 CVS。在这里,我必须在我的日志消息中重复/总结我在 hg 存储库中所做的工作。

诚然,这个工作流程中存在一些粗糙的地方。您可能在 hg 中进行了多次更改,加起来只是 CVS/SVN 中的一次更改,因此历史不会保存在 CVS/SVN 中,并且您必须总结您的提交消息。您必须手动管理保持 CVS 和您的“只读”存储库同步。这样做的好处是您不需要安装任何额外的扩展 - 您只是从两个角度处理文件本身。正在发生的一切都是非常透明的,并且在您的控制之下。

我还在努力研究 hg,但到目前为止,这个工作流程一直运行得相当好。

Harvey提供了一个很好的图表,并指出此工作流程适用于任何其他 VCS:

替代文字
(来源:sr105.com

于 2010-03-24T16:10:21.013 回答
5

试试HgSubversion。它允许您这样做。您可以将(部分)svn 存储库本地克隆到 hg 存储库,并在本地使用 hg 和远程使用 svn(推送和拉取执行您对它们的期望)。

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

于 2010-03-23T15:47:05.243 回答
2

您可以在此wiki 页面上找到一些信息。

于 2010-03-23T15:46:12.750 回答