如何与Subversion交互?
有三种方法:
该转换扩展将克隆现有的Subversion版本库到水银之一。它带有Mercurial。它大致如下所示:
hg convert <Subversion URL or directory> <path to new Mercurial repository>
例如,这将抓住SixApart memcached存储库的主干。
hg convert http://code.sixapart.com/svn/memcached/trunk
该扩展可以将新版本从Subversion存储库逐步引入到Mercurial存储库中(有点像pull)。但是,它不支持采用Mercurial修订版本并将其发送回Subversion(不推送)。 [XXX:如果错误,请更正]。
该hgsubversion扩展。在许多方面,它都是最复杂的解决方案,因为它使用Subversion API与Subversion存储库进行通信。它的目标是成为了 HG-SVN桥。它允许对修订版本进行完整的往返操作(完整的克隆,提取和推送),但是在撰写本文时[XXX:如果/如果变得不正确,请对其进行修改]它仍在开发中,尚无正式版本。因此,它仅适用于最新的Mercurial(在撰写本文时为1.3)。
- 它映射标签和分支(所有标签之前都有,
tags/
以将它们与等效命名的分支区分开)。
- 它维护了一个特殊的分支,
closed-branches
用于关闭在Subversion中删除的分支。
- 它要求按照主干/分支/标签的约定对Subversion存储库进行布局。
- 通常,命令集
hg svn <subcommand>
旨在将其集成到不需要'svn'部分的程度(即,它希望像其他Mercurial存储库一样尽可能多地处理Subversion克隆)。
它是这样的:
克隆:
hg svnclone <Subversion URL>
或(仅适用于svn://
URL)
hg clone <svn:// URL>
拉:
hg svn pull
推:
hg svn push
传入:
hg svn incoming
传出:
hg svn outgoing
检出整个存储库:
hg svnclone http://code.sixapart.com/svn/memcached
该hgsvn实用程序(到位桶树)。直到最近,这仅允许您克隆和提取Subversion存储库,但从开始hgsvn 0.1.7
就支持push。[我不知道如何以及它推。有更多经验的人应该对此进行更新。]它具有以下显着功能:
- 它为每个SVN标签生成一个Mercurial标签。
- 它在每个变更集上放置一个本地标记,以标记其SVN版本。
- 它将每个Mercurial修订版本放在以SVN分支命名的命名分支上。例如
branches/some-feature
会像hg branch some-feature
。它将中继打开trunk
(即,Mercurial默认分支上没有任何内容,除非用户明确切换到该分支)。
- 它将尝试识别分支和标签,并创建它们,但如果不能,则将其跳过。当Subversion存储库不遵循常规的主干/分支/标签布局时,这很方便。
它是这样的:
克隆:
hgimportsvn <Subversion URL>
拉:
hgpullsvn
推:
hgpushsvn
传入:
hgpullsvn -n
传出:
hgpushsvn -n
检出整个存储库:
hgimportsvn http://code.sixapart.com/svn/memcached
仅检查树干:
hgimportsvn http://code.sixapart.com/svn/memcached/trunk
hg add
忽略了文件,Mercurial将会跟踪它们。例如,如果您有一堆文件(例如deploy-test.conf
,deploy-production.conf
等),并且不想对其进行版本控制(它们中可能包含密码),但是您确实想要进行版本控制deploy-template.conf
,则可以忽略deploy*
并手动添加deploy-templace.conf
。