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

Pau*_*ite 9 svn mercurial hgsubversion

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

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

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

ben*_*sai 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,并使用不同的分支策略来管理你的开发.这里是对这些策略的一个很好的概述.

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

与CVS保持同步

每当CVS发生变化时,我都会进行cvs更新.对于"readonly"hg存储库,这将显示为已修改的文件.要同步Mercurial,我只需要做一个

hg ci -m "Updated from CVS."
Run Code Online (Sandbox Code Playgroud)

(所以,你会在我的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和"只读"存储库同步.这样做的好处是您不需要安装任何其他扩展 - 您只是从两个角度处理文件本身.发生的一切都非常透明,在您的控制之下.

我仍然在削减我的牙齿,但到目前为止,这个工作流程已经相当不错.

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

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

  • @bentsai:这可能是使用mercurial和*any*其他VCS的最基本方法的一个很好的解释.对顾问有好处.它需要一个图表. (3认同)
  • 您可以在答案中提供的图表:http://sr105.com/other_vcs_to_hg_workflow.png (2认同)

Ger*_*ies 5

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

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