作为一名自由职业者,我经常在使用Subversion存储库的公司工作。
如果我可以使用Mercurial从这些存储库中获取代码,在我离线时跟踪我的更改,然后在我重新上线时将所有本地更改提交到公司的Subversion服务器,这将非常方便。
这有用吗?你有没有阅读任何有关细节的好教程?
答案 0 :(得分:8)
我在一家使用CVS的公司工作,所以HgSubversion不是一个选择。几天前我遇到了同样的问题,并基于此开发了一个工作流程:
我在我的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:
答案 1 :(得分:5)
试试HgSubversion。它允许你做到这一点。您可以将(部分)svn存储库本地克隆到hg存储库,并在本地和远程svn中使用hg(按下并执行您期望的操作)。
我过去曾使用它取得了一些成功,但没有丰富的经验。
答案 2 :(得分:2)
您可以在此wiki page找到一些信息。