初识版本控制

代码管理、版本控制,是软件开发企业最重要的项目管理工具,但也不只限于软件行业。我们有着各种商业配置管理工具使用的经验, 更有CVS、Subvision、Git 等开源配置管理工具的经验。 我们有着十分的理由推荐您使用开源软件,有十足的把握打败众多商业软件!想听听我们的意见么?

SVN 曾经是我们版本控制服务的唯一方向, 而今天 Git 是我们推荐给企业用户的第一选择。

好书推荐:群英汇专家撰写的 《Git权威指南》

1. 版本控制系统像是...

好的版本控制系统是研发部门致胜的秘密武器,为您的数据(代码、设计文稿、图纸等)保驾护航。

  • 它像 文件服务器,存储数据,可以检入/检出,但…

    • 协同团队开发,避免相互覆盖

    • 多人在同一文件上工作,也可相安无事

  • 它像 时光机器,可以回到过去,但…

    • 对整个项目提供无限次的 UNDO(回滚)

    • 不但能够查看历史,还可以更改历史

    • 对历史的改变会形成分支,而不影响当前的代码

  • 它像 审计系统

    • 了解每次变更,提交者、时间、原因(log)

    • 通过annotate/blame,追查每一行数据的来由

  • 它像 沟通工具

    • 了解到每个人的工作进度

    • 能够收到数据变更的邮件通知

2. 四个版本控制相关模型

2.1. 没有版本控制:黑暗的史前时代

基于文件共享的团队开发,文件互相覆盖不可避免

module1_no_vc.png

2.2. 初级版本控制:低效的单线程模式

虽然避免了覆盖,但单线程工作模式非常低效

module2_single_thread.png

2.3. 多线程版本控制模式:拷贝-修改-合并

  • 现代的版本控制系统,适合商业软件开发团队

  • 允许多人同时编辑,后提交者可能需要合并(自动或手工)

module3_multi_thread.png

2.4. 分布式版本控制

  • 适合于开源软件的版本控制模式

  • 没有集中版本库,每人一个独立版本库,全球唯一版本号

module4_dvcs.png

3. 为什么使用了版本控制系统,问题亦然多多

3.1. 为什么Bug没完没了?!

no_release_branch.png

3.2. 为何项目迟迟不能发布?!

no_feature_branch.png

4. 版本控制系统的选择

4.1. 版本控制系统不完全名单

开源

闭源

集中式

CVS

ClearCase

CVSNT

MS VSTS

Subversion

Perforce

Starteam

分布式

Arch

BitKeeper

Bazaar

TeamWare

Git

Mercurial

Monotone

SVK

参考:版本控制工具比较

4.2. SVN如何打败商业版本控制系统的?

拒绝商业版本控制工具,选择开源‏的版本控制系统:

  • 检入了核弹起爆密码?

    • 不要以安全为接口掩盖版本库存储上糟糕的实现

    • CVS是如何拆除起爆密码的?

  • 为个人提供版本控制服务

    • CVS是我的旧爱

    • SVN甚至可以无须搭建服务器

  • 重构版本库?裁减臃肿的代码库?

  • Buy or sell repositories?

  • 迁移版本库。

    • CVS -> SVN, SVN -> DVCS

  • 芝麻开门!

    • 引领我们打开进入开源软件项目内部的大门

Subversion 和商业版本控制、配置管理工具的比较

  • 比较项目

    某商业软件

    SVN

    服务器端存储

    是否依赖数据库(额外的管理负担)

    依赖

    不依赖

    数据存储格式是否开放

    是否可以将版本库导出?以便重建、导入其他项目、分发给第三方或者配置管理软件切换。

    是否可以对服务器端存储进行整理

    是否可以彻底删除配置项

    是*

    可否通过插件进行功能扩展?

    命令行

    命令行功能是否完备?以便实现工作自动化

    是否可以集成到自动编译(nightly build)系统?

    文件状态保持

    客户端本地是否有配置文件以保持状态?

    是否依靠服务器端进行状态保持?

    客户端是否可以脱机运行?

    工具整合

    是否可以和资源管理器整合?

    是否有 Eclipse 插件?

    成本

    软件本身成本

    培训成本

4.3. Git正在“一统江湖”

版本控制系统的集中式和分布式之争已无悬念,分布式版本控制系统 Git 获胜。

  • 在 Google 搜索 Linus+Torvalds+git+YouTube, 看看 Linus Torvalds 对 SVN 的鄙夷。

  • 开源软件社区已经或正在迁移版本控制系统,由传统的 SVN 迁移到生产率更高的 Git。

  • 越来越多的企业认识到 Git 能够支持更多的开发模式,降低管理成本,提高编码效率。

阅读 《Git权威指南》 ,您可以了解更多。

  • 比较项目

    分布式(Git)

    集中式(SVN)

    性能

    服务器扩展能力

    ★★★

    网络带宽占用

    ☆☆☆

    本地保存的完整版本历史

    ★★★

    -

    安全

    历史版本的安全验证

    ★★★

    -

    数据安全(BCP)

    ★★★

    分支操作

    代码合并(merge)能力

    ★★★

    ★★

    分支管理

    ★★★

    ★★★

    分支建立速度

    ★★★

    ★★★

    用户界面

    使用平台广泛性

    ★★★

    ★★★

    命令行可用性

    ★★★

    ★★★

    Windows图形界面

    ★★

    ★★★

    权限管理

    统一的用户帐号

    ★★★

    ★★★

    针对目录的 Checkout

    -

    ★★★

    读取操作授权

    ★★★

    目录写操作授权

    ★★★

    ★★★

    分支写操作授权

    ★★★

    ★★

    其他

    远程版本库复制

    ★★★

    ★★★

    离线提交

    ★★★

    -

4.4. SVN的余热

如果您的企业一直使用的是类似 CVS 的集中式的版本控制系统,并且不愿意一步迈得过大(不敢尝鲜),大可选择已经被开源社区证明过的成熟的版本控制系统 Subversion(简称SVN)。

再小心地问一句:“真的不考虑 Git 这个更现代的工具么?”

SVN 和 CVS 同为开源的集中式版本控制工具。随着 CVS 的一天一天老去,越来越多的缺陷被暴露,SVN 正是被设计用于替代 CVS 的。

  • 几个GB甚至十几个GB的 CVS 库的问题:

    • 分支代价大,创建一个里程碑需要的时间?

    • CVS创建里程碑/分支一直是这么慢么?

  • 目录和文件名的版本控制

    • 如何重命名的?以破坏历史为代价的重命名?

  • file base 的 VCS,不支持 transaction

    • 为什么tag在CVS那么重要?──file base

  • 认证方式单一,安全性差

  • 二进制文件支持脆弱,易破坏

    • 忘记 -kb ?

  • CVS代码维护停滞,停止演进。第三方支持工具少

两种集中式开源版本控制系统比较: Subversion 和 CVS 的比较

  • 比较项目

    CVS

    SVN

    权限控制

    是否依赖系统帐号

    依赖

    不依赖

    可否对分支授权

    是否支持LDAP认证

    图形化帐号管理

    是(集中管理平台)

    用户可否获取忘记口令,修改口令

    是(集中管理平台)

    目录,文件名变更

    分支管理

    创建分支时间

    耗时*

    分支可见、查询

    二进制文件

    二进制优化

    二进制文件标识

    手工

    自动

    二进制文件(图形文件)被破坏

    易破坏

    不易破坏

    事物处理

    量子提交

    修改提交说明

    单个文件

    换行符

    可否指定换行符类型

    检查换行符设定,避免跨平台开发带来的混乱

    功能扩展

    CVSROOT

    hooks 脚本

    网络带宽

    网络带宽占用

    脱机命令

    部分


群英汇帮助类