将公司从SVN转换为Hg?

时间:2009-06-19 16:29:54

标签: svn version-control mercurial

我们这里是SVN的重度用户。虽然GIT优于SVN的优势使我们想要改变,但是Hg优于SVN的优势意味着它现在是时候改变了,我们需要很快开始这样做。

我对客户方面并不那么担心,但这是我的问题。

  1. 在SVN上有一些关于设置文件元属性,正确组织项目等的优秀书籍。那本关于Hg的书是什么?

  2. 有没有办法转换SVN存储库(您已经使用过)并可以报告它的效果如何?如果可能的话,我们不想丢失多年的提交日志。

  3. 当你转换时,你是如何拆分旧代码的?你是否将trunk作为一个项目,并将标签/分支作为另一个项目提交?

  4. 如果您使用SVN进行遗留工作,您是否检查了SVN或其他内容的更新?

6 个答案:

答案 0 :(得分:13)

  1. 2009年http://hgbook.red-bean.com/published by O'Reilly提供免费图书。

  2. 自0.9.5版本起,Mercurial附带conversion tool

  3. 我必须承认我改用Git而不是Mercurial。也就是说,使用Git,您可以在同一个存储库中同时导入分支,标签和主干。 Git会照顾每个人并优雅地将标签存储为标签,将分支存储为分支,将主干存储为主分支。我相信Mercurial几乎一样。

  4. 我建议您尽快切换到Mercurial(或Git或任何其他DVCS)。不要继续在两个不同的存储库上工作。当我切换时,只要我对Git有足够的信心,我就保持svn(git-svn使你能够从git到svn和反之亦然)。然后我做了开关,我锁定了SVN回购。

答案 1 :(得分:4)

请先转到Mercurial wiki。在那里,您会找到一个名为 Mercurial:The Definitive Guide 的重要链接,该链接指向hg book。您可能知道Subversion的svn book - 这与Mercurial相同(它们甚至托管在同一台服务器上,但由不同的作者编写)。

继续在wiki首页上,你会找到一个来自其他版本控制系统的难民部分。有information for SVN usersrepository conversion的链接。前者解释说,如果你想在Subversion和Mercurial之间进行双向转换,你可以尝试HgSubversion,后者解释了如何使用convert extension进行(可能的增量)Subversion - > Mercurial转换。

您是否已找到这些页面中的任何一个?如果没有,请告诉我们如何改进这些页面,以便更容易找到这些内容。

答案 2 :(得分:4)

我已经开始从Subversion转换到其他类似的东西,一次到Darcs,现在我正在玩Git。很久以前我也从CVS到Subversion做了相当大的转变。

我最大的建议是,不要一次完成所有工作。选择一个非平凡但不是很大的项目,并先转换它。为学习系统和调整工作流程分配合理的时间预算(前几周每个开发人员每小时一小时并非不合理)。一个月左右之后,一旦你在几个开发人员中拥有合理的系统经验,那么你可以考虑转换其他所有内容,如果你仍然觉得你甚至想要这样做。当您这样做时,请确保您的新VCS经验丰富的开发人员可供其他人使用,理想情况下,应该与任何正在转换的人在同一个房间工作。

哦,是的,这确实假设你已经完成了合理数量的系统游戏,并使用它构建了一个“玩具”项目。但不是太玩具了:它应该涉及至少三个开发人员,几十个文件,数百个提交,并且应该使用类似于你的一个真实项目的工作流程。

答案 3 :(得分:1)

关于分布式Subversion存在discussion(pro v con),其中一些涉及SVN与DVCS不同的项目,反之亦然,但长期存在大量信息对于任何想要迁移公司VCS的人来说,讨论都是有用的。

要直接跳到好帖子,请尝试this one

如果您决定从SVN购买DVCS,也许您应该查看git-svn,它允许svn存储库和git前端之间的双向更改。尽管使用git而不是mercurial,它应该可以为你提供两全其美的效果。

答案 4 :(得分:0)

我有一个相当大的subversion存储库,其中每个主文件夹都是一个模块。为了拆分它我使用了以下咒语:

for i in *; do \
    echo include "\"${i}\"" > /tmp/hgv.map; \
    echo rename "\"${i}\"" . >> /tmp/hgv.map; \
    hg convert --filemap /tmp/hgv.map /mnt/e/sqlwork/ "/mnt/h/work/${i}"; \
done

它获取当前目录中的每个文件夹,为convert子命令生成文件映射,并将目录转换为hg存储库。我没有历史遗失,没有其他障碍。您可能需要查看convert extension

答案 5 :(得分:0)

  1. 来自hginit.comJoel Spolsky是一个非常好的介绍。
  2. 我使用hg convert插件将我的Subversion repo转换为(原文如此)Mercurial版本。工作得很好。有关详细信息,请参阅the plugin doc。当然有other ways
  3. hg convert确实复制了整个svn集,包括分支和标记(以及您的仓库中存在的任何其他目录结构)。
  4. 使用单个版本控制系统要好得多,但如果需要,可以使用hgsubversion插件链接到subversion。