代码管理、版本控制,是软件开发企业最重要的项目管理工具,但也不只限于软件行业。我们有着各种商业配置管理工具使用的经验, 更有CVS、Subvision、Git 等开源配置管理工具的经验。 我们有着十分的理由推荐您使用开源软件,有十足的把握打败众多商业软件!想听听我们的意见么?
SVN 曾经是我们版本控制服务的唯一方向, 而今天 Git 是我们推荐给企业用户的第一选择。
好书推荐:群英汇专家撰写的 《Git权威指南》
1. 版本控制系统像是...
好的版本控制系统是研发部门致胜的秘密武器,为您的数据(代码、设计文稿、图纸等)保驾护航。
它像 文件服务器,存储数据,可以检入/检出,但…
协同团队开发,避免相互覆盖
多人在同一文件上工作,也可相安无事
它像 时光机器,可以回到过去,但…
对整个项目提供无限次的 UNDO(回滚)
不但能够查看历史,还可以更改历史
对历史的改变会形成分支,而不影响当前的代码
它像 审计系统 …
了解每次变更,提交者、时间、原因(log)
通过annotate/blame,追查每一行数据的来由
它像 沟通工具 …
了解到每个人的工作进度
能够收到数据变更的邮件通知
2. 四个版本控制相关模型
2.1. 没有版本控制:黑暗的史前时代
基于文件共享的团队开发,文件互相覆盖不可避免
2.2. 初级版本控制:低效的单线程模式
虽然避免了覆盖,但单线程工作模式非常低效
2.3. 多线程版本控制模式:拷贝-修改-合并
现代的版本控制系统,适合商业软件开发团队
允许多人同时编辑,后提交者可能需要合并(自动或手工)
2.4. 分布式版本控制
适合于开源软件的版本控制模式
没有集中版本库,每人一个独立版本库,全球唯一版本号
3. 为什么使用了版本控制系统,问题亦然多多
3.1. 为什么Bug没完没了?!
3.2. 为何项目迟迟不能发布?!
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 脚本
网络带宽
网络带宽占用
高
低
脱机命令
否
部分