代码之家  ›  专栏  ›  技术社区  ›  Paul D. Waite

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

  •  9
  • Paul D. Waite  · 技术社区  · 15 年前

    作为自由职业者,我经常在使用颠覆性知识库的公司工作。

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

    这行吗?你读过关于细节的好教程吗?

    3 回复  |  直到 7 年前
        1
  •  5
  •   Gerco Dries    14 年前

    尝试 HgSubversion . 它允许你这样做。您可以在本地将一个(部分)SVN存储库克隆到一个HG存储库,并远程使用HG本地和SVN(按和拉可以实现您期望的操作)。

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

        2
  •  8
  •   Community CDub    7 年前

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

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

    我创建了一个mercurial存储库,其中我的cvs存储库是,我将其视为“只读的”。然后我将这个“只读”的hgrrepo克隆到工作存储库,在那里我在本地进行更改/修复。我已经为我所做的每个特性和修复克隆了repo,但是您也可以只拥有一个repo,并使用不同的分支策略来管理您的开发。这里是 a good overview 这些策略。

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

    与cvs保持同步

    每当cvs发生变化时,我都会更新cvs。对于“readonly”hg存储库,这将显示为修改过的文件。要同步mercurial,我只需

    hg ci -m "Updated from CVS."
    

    (所以,你会在我的hg日志中看到很多这些信息)。此时,我的“只读”存储库与cvs同步。现在我可以去我克隆的任何一个存储库并发布一个 hg pull 然后 hg update 同步它们。

    将更改从hg提交回cvs

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

    不可否认,此工作流中存在粗糙点。您可以在hg中进行多个更改,这些更改加起来只对cvs/svn进行了一次更改,这样历史记录就不会保存在cvs/svn中,您必须总结提交消息。您必须手动管理使cvs和“readonly”存储库保持同步。这样做的好处是,您不需要安装任何额外的扩展—您只需要从两个角度处理文件本身。所有发生的事情都是透明的,在你的控制之下。

    我仍然在努力工作,但到目前为止,这个工作流程已经相当不错了。

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

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

        3
  •  2
  •   Vadim Kotov First Zero    7 年前

    你可以找到一些关于这个的信息 wiki page .