将一家公司从SVN转换为Hg?

将一家公司从SVN转换为Hg?,svn,version-control,mercurial,Svn,Version Control,Mercurial,我们在这里大量使用SVN。虽然GIT相对于SVN的优势让我们想要改变,但Hg相对于SVN的优势意味着现在是改变的时候了,我们需要尽快开始改变 在客户方面,我不太担心,但以下是我的问题 有一些关于设置文件元属性、正确组织项目等SVN方面的优秀书籍。那本书是给Hg的吗 有没有一种方法可以转换SVN存储库(您已经使用过)并报告其运行情况?如果可能的话,我们不希望丢失多年的提交日志 当您进行转换时,您是如何拆分旧代码的?您是否将trunk作为一个项目提交,将tags/fork作为另一个项目提交 如果您将

我们在这里大量使用SVN。虽然GIT相对于SVN的优势让我们想要改变,但Hg相对于SVN的优势意味着现在是改变的时候了,我们需要尽快开始改变

在客户方面,我不太担心,但以下是我的问题

  • 有一些关于设置文件元属性、正确组织项目等SVN方面的优秀书籍。那本书是给Hg的吗

  • 有没有一种方法可以转换SVN存储库(您已经使用过)并报告其运行情况?如果可能的话,我们不希望丢失多年的提交日志

  • 当您进行转换时,您是如何拆分旧代码的?您是否将trunk作为一个项目提交,将tags/fork作为另一个项目提交

  • 如果您将SVN用于遗留工作,是否签入SVN更新或其他内容

  • 2009年有一本免费的书

  • 从0.9.5版开始,Mercurial附带了一个

  • 我必须承认我换了Git而不是Mercurial。也就是说,使用Git,您可以在同一存储库中同时导入分支、标记和主干。Git负责所有人,并将标记作为标记、分支作为分支、主干作为主分支优雅地存储。我相信Mercurial的情况也差不多

  • 我建议您尽快切换到Mercurial(或Git或任何其他DVC)。不要继续在两个不同的存储库上工作。当我切换时,只要我对Git有足够的信心,我就保留svn(Git svn使您能够从Git到svn和viceversa进行交互)。然后我做了一个切换,锁定了SVN回购协议

  • 关于分布式Subversion有一个(赞成/反对),其中一些涉及SVN不如DVCSs做得好的项目,反之亦然,但在长时间的讨论中,有很多信息对任何想迁移公司VCS的人都很有用

    要直接跳到一篇好文章,请尝试


    如果您决定从SVN购买DVCS,也许您应该看看哪一个允许在SVN存储库和git前端之间进行双向更改。虽然使用git而不是mercurial,但它应该能让您两全其美。

    请先转到。在那里,您会发现一个名为《Mercurial:The Financial Guide》(《权威指南》)的突出链接,该链接指向所称的。您可能知道Subversion的定义——这与Mercurial是等效的(它们甚至托管在同一台服务器上,但由不同的作者编写)

    在维基首页的下一页,你会找到一个关于来自其他版本控制系统的难民的部分。与和有联系。前者解释了如果您想在Subversion和Mercurial之间进行双向转换,您可以尝试,后者解释了如何使用来进行(可能的增量)Subversion->Mercurial转换


    你已经找到这些页面了吗?如果没有,请告诉我们如何改进这些页面,以便更容易找到这些内容。

    我已经开始过几次从Subversion到其他东西的转换,一次到DARC,现在我正在玩Git。不久前,我还从CVS向Subversion做了一个相当重要的转变

    我最大的建议是,不要一下子做所有的事情。选择一个不平凡但不庞大的项目,并首先转换它。为学习系统和调整工作流程分配合理的时间预算(前几周每个开发人员每天一小时并非不合理)。大约一个月后,一旦您在几个开发人员中对系统有了相当多的经验,那么您可以考虑转换其他一切,如果您仍然觉得您甚至想这样做的话。当你这样做的时候,确保你的开发人员对新的创投公司有经验,并且其他人也可以使用,理想情况下,他们应该和任何被转换的人在同一个房间里工作


    哦,是的,这确实假设您已经对该系统进行了合理的操作,并使用它构建了一个“玩具”项目。不过也不太好玩:它应该至少涉及三名开发人员、几十个文件、数百次提交,并且应该使用与您的一个实际项目类似的工作流。

    我有一个相当大的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子命令生成一个filemap,并将目录转换为hg存储库。我没有任何历史损失,也没有遇到其他障碍。你可能想看一看

  • 来自是一个非常好的介绍
  • 我使用了
    hgconvert
    插件将我的Subversion repo转换为Mercurial版本。工作得很好。有关详细信息,请参阅。当然有
  • hgconvert
    确实复制了完整的svn集,包括分支和标记(以及repo中存在的任何其他目录结构)
  • 使用单一版本控制系统要好得多,但如果需要,可以使用插件与subversion链接

  • 这些问题涉及技术方面;另外还有一个完整的企业文化和培训方面。你觉得怎么样?这是同一本书…:-)Bryan已经在网上发布了一段时间以获取反馈,现在也在纸上发布。谢谢Martin,我已经修复了答案!