我们这里是SVN的重度用户。虽然GIT优于SVN的优势使我们想要改变,但是Hg优于SVN的优势意味着它现在是时候改变了,我们需要很快开始这样做。
我对客户方面并不那么担心,但这是我的问题。
在SVN上有一些关于设置文件元属性,正确组织项目等的优秀书籍。那本关于Hg的书是什么?
有没有办法转换SVN存储库(您已经使用过)并可以报告它的效果如何?如果可能的话,我们不想丢失多年的提交日志。
当你转换时,你是如何拆分旧代码的?你是否将trunk作为一个项目,并将标签/分支作为另一个项目提交?
如果您使用SVN进行遗留工作,您是否检查了SVN或其他内容的更新?
答案 0 :(得分:13)
2009年http://hgbook.red-bean.com/和published by O'Reilly提供免费图书。
自0.9.5版本起,Mercurial附带conversion tool。
我必须承认我改用Git而不是Mercurial。也就是说,使用Git,您可以在同一个存储库中同时导入分支,标签和主干。 Git会照顾每个人并优雅地将标签存储为标签,将分支存储为分支,将主干存储为主分支。我相信Mercurial几乎一样。
我建议您尽快切换到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 users和repository 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)
hg convert
插件将我的Subversion repo转换为(原文如此)Mercurial版本。工作得很好。有关详细信息,请参阅the plugin doc。当然有other ways。hg convert
确实复制了整个svn集,包括分支和标记(以及您的仓库中存在的任何其他目录结构)。