水银和子版本之间的互操作性

21

最近有类似问题similar question,但并不相同。

Mercurial网站有一detailed page详细列出了4种不同选项的比较,以实现Mercurial和Subversion的互操作性。

我想知道是否有人尝试过其中一种或多种,并能分享任何好的或坏的经验。hgsubversion download上的注释说:

hgsubversion是用于Mercurial的扩展,允许使用Mercurial作为Subversion客户端。目前它不适合生产环境使用。只有当你准备好对其进行修改,并深入研究Mercurial和/或Subversion的内部时,才应该使用它。

这对我来说就像是"放弃希望,所有进入此处者都将被逮捕"或"闯入者将被逮捕"之类的标志。因此,我只是想知道这个或其他替代方案是否值得尝试,适合那些没有太多额外时间来hack的人。


4
+1 懒惰。尽管有所有的警告,我也无法尝试任何选项 :-) (注:+1 表示赞同或支持,此处用于表达对“懒惰”的认同) - Wim Coenen
我不会称之为“懒惰”,我会称之为“节俭”。设置/管理源代码控制配置只是软件工作的一小部分,而软件工作又只是我的工作的一小部分。如果不这样,我就必须去打扰我们的IT团队,但他们不会知道,因为他们通常使用“真正”的软件(Windows/IIS/SQLServer等)。所以当涉及到这种“小”任务时,我必须明智地利用我的时间。当我真的很懒时,我以此为荣。:) - Jason S
现在它还没有准备好用于生产环境 - 这种情况仍然存在吗? - inger
乌龟版本控制软件(TortoiseHG)用户可以参考http://abdullin.com/journal/2010/3/22/use-tortoisehg-mercurial-with-svn-repository.html。尽管有点慢,但效果很好。 - Ahmad
6个回答

4
我认为hgsubversions的作者有些过于谨慎了。如果按照README的指示使用合适版本的Mercurial和Subversion,而不是你的发行版随意安装的版本,那么它实际上运行得相当不错。同样,所包含的文档是最新的,而在网上找到的可能已经过时。我已经使用了几周并取得了合理但不完美的结果。
当你遇到两个系统的角落问题时,你就会遇到问题:hgsubversion和其他扩展(我与hgtasks有问题)似乎不喜欢彼此;不清楚如何处理属性等。

来自未来的问候!我在工作中已经使用了几个月的hgsubversion,它似乎大部分都很好。与纯Mercurial相比,它有一些不便之处(例如在我有未提交的更改时无法从Svn更新),并且在尝试在Svn中进行奇怪的分支事件时出现了严重的问题(因此不要这样做),但除此之外,没有问题。 - Tom Anderson

3

我刚刚开始使用第四个选项hgsvn进行工作。尽管Mercurial页面上说hgsvn 0.1.7不支持推送回svn repo,但实际上它是支持的。

我的用例非常简单:我只想要本地分支的功能(目前阶段)。hgsvn页面上列出的工作流程正是我所使用的,到目前为止还没有出现任何问题。


3
我想推荐第二个选项hgsvn,如果你想镜像一个大仓库的话,它会比较慢,但是你可以从接近最新版本的修订开始(通常这也是你想要的)。
我发现它非常强大,可以镜像超过5000个修订的代码库。如果你需要的话,你可以将变更集推回去。

让我来给你提供一个提示:我目前使用mercurial + hgsvn + http://arrenbrecht.ch/mercurial/pbranch/来为(开源)项目做出贡献。只需将svn repo拉入mercurial中,使用pbranch管理您的补丁即可。然后,您可以通过电子邮件向项目维护者传递您的补丁。 - wires

2

是的,你必须使用最新版本的“crew version” Mercurial,可以在Mercurial wiki的CrewRepository页面上找到。

当Mercurial 1.3于7月1日发布时,hgsubversion应该开始维护一个稳定分支。至少这是IRC(irc.freenode.net上的#hgsubversion)上的消息。


哦啊。我期待7月1日。 - Jason S
dohhwww,看起来这个对hgsubversion不正确;似乎是添加/发布了“convert”扩展。 - Jason S
转换扩展是与Mercurial一起提供的扩展(已经提供了很长时间)。很抱歉,hgsubversion尚未发布稳定版本,显然他们陷入了比我回答这个问题时想象的更大的重写。 - Martin Geisler

1

我已经使用Subversion多年了,但我有兴趣尝试一下这个分布式版本控制系统的想法。(我想使用git,但它在Windows上不太好用,所以无法在工作中使用。因此,我接下来想尝试Mercurial。)

刚开始,我想要与Subversion服务器推送和拉取。所以我尝试了第一种选择,即hgsubversion。我正在使用Ubuntu 9.04(Jaunty)和hg 1.1.2。我按照网页上的说明进行操作,看起来都安装成功了。但是当我尝试使用hg svnclone命令时,我收到了一个“未知命令”的错误。进一步的查找显示,现在你只需使用前缀为svn+的SVN URL来执行hg clone。例如:

hg clone svn+https://server/svn/repo/

但是,这时我又收到了一个错误信息:

abort: could not import module encoding!

这似乎是一个已知的漏洞,但经过一番折腾,我无法弄清楚如何修复它。

总结:选项1目前对我来说无法使用。其他选项不符合我期望的工作流程。

更新:我尝试了Mercurial 1.2.1,得到了相同的结果。有人告诉我,在开发中的mercurial-crew分支应该可以工作。


1
你需要最新版本的Mercurial和hgsubversion。然而,目前要小心使用hgsubversion。看起来有很多重构正在进行。 - Nick Randell
是的,你需要Mercurial 1.3版本——编码模块是在1.2.1发布之后添加的。 - Martin Geisler

0

我已经使用hgsubversion几个月了。你可能会错过一些功能,但它已经可以用于生产。

OGRE和许多其他人决定使用hgsubversion,因为它很快。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接