写点什么

软件企业从 Subversion 迁移到 Git ,真的准备好了吗?

  • 2012-09-03
  • 本文字数:2025 字

    阅读完需:约 7 分钟

除了人,软件公司最宝贵的就是代码了,这些代码大多储存在 Subversion(以下简称”SVN”) 这样开源的版本控制系统(VCS)中。代码是容易修改和变更的,因此,代码的备份、历史追踪、协同编辑等任务同样需要版本控制系统完成。从最早本地 VCS 系统 RCS、1990 年 CVS、2000 年 SVN,到如今开源世界风头正健的 Git,同语言编辑工具一样,SVN、Git 都是程序员的必备利器。随着 GitHub 的流行,很多软件企业开始计划转向 Git,但是企业真的准备好了吗?

从 SVN 到 Git,不仅仅是工具的替换,还有基于其上的工具和一些管理流程的变化。笔者建议:软件企业需要评估自己当前的状态和企业文化,认真考虑商业目标,谨慎迁移。我们不妨从以下几点来探讨一下。

陡峭的学习曲线

对于采用 SVN 进行管理的企业,Git 相对复杂,开发工程师的学习曲线并不平缓。

Git 的命令分为高层和底层,常用的高层命令约有 30 多个,与 SVN 近似。这些操作不能继承 SVN 的经验,因此工程师需要重新学习 branch、merge、reset、rebase、revert、pull、fetch 等操作命令,需要重新了解哈希值格式的版本号,并用它来进行检出、比较等。

对于较多使用 word、ppt、excel、图片、IDE 等工具的人员来说,从类似 FTP 的 SVN 转向 Git ,学习过程会比较痛苦。

缺少角色授权和文件级访问控制

Git 作为开源自由原教旨主义项目,它没有对版本库的浏览和修改做任何的权限限制。Git 的创始人 Linus Torvalds 也曾说:“不要让权限成为政治的理由,Git 没有权限控制。”

由于缺少角色授权,因此在组织结构管理上比较困难。实际操作中,一个 Git 仓库用来实现一个项目,大型项目可能需要许多 Git 仓库配合实现。在 SVN 中不同项目在不同目录中,通过角色授权完成组织结构的规划。

实现商业目标的软件企业显然需要文档或代码的访问授权和控制,目前 Git 本身是不支持的,需要集成第三方工具实现访问控制。

有限的目录检出功能

SVN 是一个中心仓库和众多客户端目录的关系,因此,SVN 用户都熟悉工作在某个目录上,在不同的工作计算机上,检出目录就可以编辑。然而,Git 是一个中心仓库和众多客户端仓库的关系,你必须工作在整个仓库上,虽然在 Git1.7 版本后支持了类似目录检出的功能,但仍要先检出整个仓库。软件企业的工程师常同时在多个项目中工作,如果修改一点东西就需要克隆仓库,对故障响应将有影响。

浪费已投入的开发成本

软件开发生命周期管理工具的基础是版本控制系统,各商业软件开发管理平台都是基于自主研发的版本控制系统,在此基础上扩展到项目管理、文档管理、代码评审、发布部署、缺陷管理等。基于 SVN 的开源或自主研发的管理工具非常成熟多样。迁移到 Git,则完全浪费了投入到 SVN 管理工具的开发成本。

图形化工具及接口不够强

虽然 Git 的图形工具正在增多,但在 Windows 下还需要等待这些开源工具增强功能。同时,Git 的接口待加强,与众多工具集成待完善,这些都是需要时间来解决。

目前很多人倡导的 Git 的优点并非不可替代

Git 速度快,但是 SVN 使用用廉价的高性能主机同样可以提升速度;Git 无需网路也可以工作,但当前稳固的网络基础环境和多样的接入方式,让 SVN 并不担心网络问题。另外 Git 方便地处理分支的特性,如果通过控制开发节奏,增加评审,减少分支数量,就可以让分支合并更简单快键,开发会更有效率,SVN 也可以更好地管理分支。 SVN 的 1.7 版本以不兼容旧版客户端的代价新增和改进了很多功能,开始向 Git 靠拢,这也使 SVN 具备 Git 的特性。

鉴于以上分享的几个基本点,建议企业谨慎迁移。

笔者对某些场景的命令进行了比较,下表是在 Git-1.7 和 SVN-1.6 上测试的,目的是为了说明 SVN 的操作经验在 Git 上不能直接套用,当然 Git 也有许多独特的优秀功能。

场景 SVN Git 操作动作追踪 所有的操作均作为一次提交,并分配版本号,可追踪 可以撤销某次提交、合并的动作,好像没有发生一样 引用公共库 用链接目录实现
$svn propset svn:externals < module name> < repository_url> Git 先克隆仓库,再用子模块方式实现
$git clone < repository_url> < directory>
$git submodule add < repository_url> 在本地检出目录 用检出功能实现
$ svn co < repository_url> < directory> 需要先克隆仓库,激活目录检出功能, 通过配置需要保留的目录实现
$git clone < repository_url> < directory>
$cd < directory>
$git config core.sparsecheckout true
$echo < directory> >> .git/info/sparse-checkout
$git read-tree -m -u HEAD 新增文件到中心仓库 用提交功能实现
$svn add < file>
$svn commit –m “new file” 提交后,需要推送到中心仓库
$git add < file>
$git commit –m “new file”
$git push origin## 作者简介

李新,新浪产品部高级配置管理工程师,有丰富的软件流程方面的经验。


感谢黄玲艳对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2012-09-03 00:008250

评论

发布
暂无评论
发现更多内容

合同总是延误?8款好用的电子签章工具推荐给你

数字工具研究

Apache Flink 2.1.0: 面向实时 Data + AI 全面升级,开启智能流处理新纪元

Apache Flink

大数据 flink 实时计算 实时计算Flink

双向闭环驱动精准决策,从战略到单店SKU的无缝链接

第七在线

终结警报疲劳!告警分级通知配置实战指南!

华为云开发者联盟

点击解锁云端新视野:云监控(CES)2025年6月全新升级

华为云开发者联盟

2025 WAIC 世界人工智能大会有哪些亮点?

GPU算力

扣子可以发布到小米搞钱了!手把手教程来了丨coze开发者瓜分亿级流量池指南

阿星AI工作室

开发者 产品经理 小米 扣子

AI+评查,助力烟草企业提质增效

中烟创新

为什么选择 BeeWorks Meet?企业会议系统的私有化必要性

BeeWorks

即时通讯 IM 私有化部署

通义灵码支持 Qwen3-Coder,带你玩转 Agentic Coding,免费不限量

阿里云云效

阿里云 云原生 通义灵码

工程机械行业工具管理破局之战:揭秘RFID智能库房如何终结跨区流转困局

斯科信息

RFID解决方案 RFID工具库房 斯科信息 RFID技术

龙蜥受邀参加2025开放计算技术大会,解码基础模型驱动下的系统创新与生态共建

OpenAnolis小助手

开源 AI 操作系统 龙蜥社区

通义灵码支持 Qwen3-Coder,带你玩转 Agentic Coding,免费不限量

阿里巴巴云原生

阿里云 AI 云原生 通义灵码

深度拆解LLM的核心技术栈,助您掌握从模型选型到部署优化的全流程

聚客AI学院

人工智能 agent 大模型落地 AI 智能体 RAG应用

Higress 入选《AI Cloud 大模型推理与交互典型案例》

阿里巴巴云原生

阿里云 云原生 Higress

高德开放平台全球LBS服务,MCP Server正式登陆阿里云云市场

高德开放平台

四步破解日志平台数据孤岛困局,核心驱动企业高效运营

日志易

日志管理 日志易

ToDesk云电脑 vs 顺网云 vs 海马云:谁才是5090显卡云电脑的真王者?

袁袁袁袁满

Django模型迁移指南:从命令用法到最佳实践

电子尖叫食人鱼

HGDD 荣耀开发者日丨荣耀小游戏线下沙龙圆满收官

荣耀开发者服务平台

荣耀开发者服务平台 荣耀HONOR 荣耀远航计划 HGDD 荣耀开发者日 荣耀小游戏

企业私有化即时通讯工具如何选?

BeeWorks

即时通讯 IM 私有化部署

紧急救火与战略开发:软件工程中的关键抉择

qife122

软件工程 技术债务

喜报!阿里云首批通过 Serverless 云服务能力要求 - 消息队列评估

阿里巴巴云原生

阿里云 Serverless 云原生

阿里云 API 网关 x OKG:游戏连接治理的「最后一公里」

阿里巴巴云原生

阿里云 云原生 API OKG

MyEMS 开源能源管理系统:赋能双碳目标的能源数字化基础设施

开源能源管理系统

开源 能源管理系统

为什么上了ERP系统后,员工效率反而变得更低了呢?

优秀

ERP ERP系统

五年磨一剑:Agent 时代追风不如造风

阿里巴巴云原生

阿里云 云原生 AI Agent

Agentic AI, 基于 Dify x OceanBase 的实践

老纪的技术唠嗑局

OceanBase 社区版 dify #工作流

LoongCollector:构建智能时代的数据采集新范式

阿里巴巴云原生

阿里云 云原生 AI Agent

西门子 Smart ECX 与 MyEMS:智慧能碳管理平台的技术路径与生态差异深度解析

开源能源管理系统

开源 能源管理系统

软件企业从Subversion迁移到Git ,真的准备好了吗?_架构_李新_InfoQ精选文章