草庐IT

svn - 你会从 cvs 迁移到 svn 还是直接迁移到 git 或 hg?

coder 2023-06-25 原文

我不知道这个论坛是否合适。

我的公司使用 CVS 作为版本控制系统。我们计划转向更现代的版本控制系统。作为风险最小的解决方案,您会推荐什么?

我的想法是使用 Subversion,但我也听到了很多关于 Git 和 Mercurial 的好消息

但是,我们是一家小公司,不需要分布式版本控制系统。除了分布式之外,Git 或 Mercurial 相对于 Subversion 还有什么优势?

最佳答案

我们大约 2 周前在我的工作中从 CVS 迁移到 Mercurial。我们是一个6人的小团队。在迁移之前,我们中只有两个人已经使用过 CVS 以外的东西。

我负责新 CVS 的选择。我考虑了 Git 和 Mercurial。

我们对 CVS 的一些不满是分支可能性很差、不支持重命名、非常糟糕的冲突算法。

我从未考虑过 SVN,因为过去每次我尝试将它与分支一起使用时, merge 总是令人头疼。坦率地说,现在所有的炒作都是为了 dvc,这一定是有原因的;)

在 Git 和 Mercurial 之间,更多的是个人选择。我爱上了 Mercurial,因为我发现它比 Git 更容易学习,而且不太以“真正的大项目”为导向。

Git/Mercurial 相对于 SVN 的优势

  1. 更好的分支和 merge 能力(真的是最重要的原因)
  2. 可以通过电子邮件等捆绑导出/导入补丁
  3. 没有对此进行广泛的测试,但我认为在很多方面两者都比 SVN 更快( merge 、克隆、比较等)
  4. 开发更加活跃,我听说 SVN 团队正在努力向前推进,但仍然如此。
  5. 非常好的扩展基础架构
  6. 提供了网络服务器功能,例如对于快速共享某些内容非常有用。

即使您说“除了它们是分布式的”,我认为这确实是一个 killer 级功能。 DVCS 允许一些非常巧妙的东西,一开始它可能看起来没什么用,但是一旦你用过它们,你就离不开它们;)

学习曲线

团队中有两个人对这一变化并不满意。但是通过一些幻灯片向整个团队解释了两个小时,一切都进行得很顺利。

当然,他们有时会问我问题,但自迁移以来我们没有遇到任何真正的问题。关于在工作目录中 merge pull 更改的方式的一些小误解。几分钟内解决不了任何问题。

我想我可以说,在短短 2 周左右的时间里,每个人的工作效率至少都和以前一样,并且对新工具充满信心。现在我们可以使用特性分支而不用担心 merge 的到来:)

将 CVS 迁移到 mercurial

https://www.mercurial-scm.org/wiki/RepositoryConversion#CVS

关于从 CVS 迁移到 Mercurial 的官方 wiki 列出了不同的方法。我测试了 Convert 扩展和最终使用的 cvs2hg。

来自 CVS 的 Tailor 扩展 hg-cvs-import 似乎是旧代码,不再维护。

Convert 扩展在一个简单的存储库上工作得很好,但由于我们的 CVS 存储库非常大并且有一些非常奇怪的分支,该扩展无法正确导入所有历史记录。 HEAD 是正确的,但缺少一些分支。

所以,最后的选择是cvs2hg .事实上,它是 cvs2svn 的新后端,它转换为 Mercurial 而不是 Subersion。

自述文件中介绍的“快速启动”方法适用于所有分支。但最后我使用选项文件添加了一些用户映射并修剪了一些错误的提交或不需要的分支。

随文件提供的选项文件有很好的注释,您可以轻松配置它以适合您。

有关信息,在初始转换之后,我使用 Convert 扩展将一些子项目从生成的 Mercurial 存储库提取到另一个 Mercurial 存储库,如解释的那样 here .

关于svn - 你会从 cvs 迁移到 svn 还是直接迁移到 git 或 hg?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5153122/

有关svn - 你会从 cvs 迁移到 svn 还是直接迁移到 git 或 hg?的更多相关文章

  1. git使用常见问题(提交代码,合并冲突) - 2

    文章目录git常用命令(简介,详细参数往下看)Git提交代码步骤gitpullgitstatusgitaddgitcommitgitpushgit代码冲突合并问题方法一:放弃本地代码方法二:合并代码常用命令以及详细参数gitadd将文件添加到仓库:gitdiff比较文件异同gitlog查看历史记录gitreset代码回滚版本库相关操作远程仓库相关操作分支相关操作创建分支查看分支:gitbranch合并分支:gitmerge删除分支:gitbranch-ddev查看分支合并图:gitlog–graph–pretty=oneline–abbrev-commit撤消某次提交git用户名密码相关配置g

  2. ruby-on-rails - Ruby 流量控制 : throw an exception, 返回 nil 还是让它失败? - 2

    我在思考流量控制的最佳实践。我应该走哪条路?1)不要检查任何东西并让程序失败(更清晰的代码,自然的错误消息):defself.fetch(feed_id)feed=Feed.find(feed_id)feed.fetchend2)通过返回nil静默失败(但是,“CleanCode”说,你永远不应该返回null):defself.fetch(feed_id)returnunlessfeed_idfeed=Feed.find(feed_id)returnunlessfeedfeed.fetchend3)抛出异常(因为不按id查找feed是异常的):defself.fetch(feed_id

  3. ruby - 你会如何在 Ruby 中表达成语 "with this object, if it exists, do this"? - 2

    在Ruby(尤其是Rails)中,您经常需要检查某物是否存在,然后对其执行操作,例如:if@objects.any?puts"Wehavetheseobjects:"@objects.each{|o|puts"hello:#{o}"end这是最短的,一切都很好,但是如果你有@objects.some_association.something.hit_database.process而不是@objects呢?我将不得不在if表达式中重复两次,如果我不知道实现细节并且方法调用很昂贵怎么办?显而易见的选择是创建一个变量,然后测试它,然后处理它,但是你必须想出一个变量名(呃),它也会在内存中

  4. ruby - 使用哪个,eruby 还是 erb? - 2

    eruby和erb有什么区别?哪些考虑因素会促使我选择其中之一?我的应用程序正在为网络设备(路由器、负载平衡器、防火墙等)生成配置文件。我的计划是对配置文件进行模板化,在源文件中使用嵌入式ruby​​(通过eruby或erb)来执行诸如迭代生成路由器的所有接口(interface)配置block之类的操作(这些block都非常相似,仅在标签上有所不同和IP地址)。例如,我可能有这样一个配置模板文件:hostnamesample-routerlogging10.5.16.26当通过嵌入式ruby​​解释器(erb或eruby)运行时,会产生以下输出:hostnamesample-rout

  5. ruby - Dropbox 类似 git 的服务——没有 rsync 和 inotify - 2

    关于如何使用git设置类似Dropbox的服务,您有什么建议吗?您认为git是解决此问题的合适工具吗?我在考虑使用git+rush解决方案,你觉得怎么样? 最佳答案 检查这个开源项目:https://github.com/hbons/SparkleShare来自项目的自述文件:Howdoesitwork?SparkleSharecreatesaspecialfolderonyourcomputer.Youcanaddremotelyhostedfolders(or"projects")tothisfolder.Theseprojec

  6. ruby - 混帐 & ruby : How can I unset the GIT_DIR variable from inside a ruby script? - 2

    我编写了一个非常简单的“部署”脚本,作为我的裸git存储库中的post-updateHook运行。变量如下livedomain=~/mydomain.comstagingdomain=~/stage.mydomain.comgitrepolocation=~/git.mydomain.com/thisrepo.git(bare)core=~/git.mydomain.com/thisrepo.gitcore==addedremoteintoeachlive&stagegitslive和stage都初始化了gitrepos(非裸),我已经将我的裸仓库作为远程添加到它们中的每一个(名为co

  7. ruby - 让 bundler 使用 http : instead of git:? - 2

    我正在安装gitlabhq,并且在Gemfile中有对某些资源的“git://...”的引用。但是,我在公司防火墙后面,所以我必须使用http://。我可以手动编辑Gemfile,但我想知道是否有另一种方法告诉bundler使用http://作为git存储库? 最佳答案 您可以通过运行gitconfig--globalurl."https://".insteadOfgit://或通过将以下内容添加到~/.gitconfig:[url"https://"]insteadOf=git://

  8. ruby-on-rails - 安装 active admin 时 activeadmin.git (at master) is not yet checked out 错误 - 2

    Activeadmingem已添加到我的rails项目中,但每次我尝试安装railsgactive_admin:install时,我都会收到类似的错误git://github.com/activeadmin/activeadmin.git(atmaster)isnotyetcheckedout.Runbundleinstallfirst.我肯定在运行“railsgactive_admin:install”之前运行了bundle。运行“bundleshow”后,我看到我已将“*activeadmin(1.0.0.pre3f916d6)”添加到我的项目中,但不断收到此错误消息。我的gem文

  9. ruby-on-rails - 如何在 Rails 中的不同数据库上执行直接 SQL 代码 - 2

    我正在编写一个Rails应用程序,它将监视某些特定数据库的数据质量。为了做到这一点,我需要能够对这些数据库执行直接SQL查询——这当然与用于驱动Rails应用程序模型的数据库不同。简而言之,这意味着我无法使用通过ActiveRecord基础连接的技巧。我需要连接的数据库在设计时是未知的(即:我不能将它们的详细信息放在database.yaml中)。相反,我有一个模型“database_details”,用户将使用它来输入应用程序将在运行时执行查询的数据库的详细信息。因此与这些数据库的连接实际上是动态的,细节仅在运行时解析。 最佳答案

  10. ruby-on-rails - Ruby on Rails - 参数是方法还是散列? - 2

    所以,我正在尝试RubyonRails指南的入门部分here.我不明白line在本教程中。引用它:Theparamsmethodistheobjectwhichrepresentstheparameters(orfields)cominginfromtheform.我以前确实有一些Rails方面的经验,而且我一直假设params是一个散列。但这里他们称之为方法,它是一个对象。params是方法还是哈希?还有,在ruby中,方法也是对象吗? 最佳答案 params是一个返回ActionController::Parameters对象的

随机推荐