方面 |
Perforce |
ClearCase |
SVN |
Git |
一句话总结 |
企业级版本化产品开发 |
企业级版本化产品开发 |
轻量级 |
分布式 |
简述 |
|
|
|
|
特色功能 |
|
|
|
|
可视化 |
|
|
|
|
平台 |
|
|
|
|
0. 演化
- “人肉”版本管理
- 通过在文件命名上增加自定义版本号、描述的方式来维护多个版本的文件/文件夹
- 简单的集中式版本管理
- 比如VCS
- 改进
- 仍存在的问题
- 但客户端要实时与服务端通信,同一文件只有一个人可以checkout进行修改,然后再checkin
- 复杂的集中式版本管理
- 如SVN、CVS
- 改进
- 不再锁文件,大家都可以checkout后修改,但要有合并的功能
- 支持分支功能,可以多版本并行
- 仍存在的问题
- 大家要抢着提交,但还是可能错过别人的更新,导致没有先合并而覆盖别人的代码
- 分布式版本管理
- 如Git
- 改进
- 客户端不再需要实时和服务端通信,支持先本地提交,避免覆盖别人的改动
- 支持审批功能
- 社交化分布式版本管理
1. Perforce(P4)
- 优点
- 基于Changelist管理一次性对多个文件的提交,可以方便得查看哪些文件是一起提交的
- 未Checkout的文件是只读状态(虽然可以手动改),IDE插件可以自动Checkout
- 可以通过全部checkout再全部revert unchanged files来避免提交checkout但未改变内容的文件,不利于以后的问题排查
- Workspace的功能比较强大,支持写映射脚本
- 缺点
- checkout、submit等操作都需要随时联网
- 没有ignore功能?
2. ClearCase
- 优点
- 可集成BeyondCompare等工具
- 未Checkout的文件是只读状态(虽然可以先让它是Hijacked状态,后面再处理),IDE插件可以自动Checkout
- 可以方便的以图形化的方式查看单个文件或文件夹的Version History
- View的功能比较强大,可以组合不同VOB、不同分支,支持在ConfigSpec中写脚本
- 缺点
- 查看历史时,无法方便得查看哪些文件是一起提交的
- 不能像Perforce那样revert unchanged files,也就不能避免提交checkout但未改变内容的文件,不利于以后的问题排查
- checkout、commit等操作都需要随时联网
- 没有ignore功能
- 没有递归把一个文件夹下的文件都add to control的功能,要用命令,而且权限不够
3. SVN
- 优点
- 安装、入门使用简单迅速
- show history既可以方便得查看哪些文件是一起提交的(即基于提交来查看),也可以查看单个文件的提交历史
- 不需要checkout,也就是本地修改不需要联网
- 有ignore功能
- 缺点
- commit需要联网,相对于Perforce和ClearCase而言本地修改比较省事。
- 互联网开发(没有特定版本一起release features,有可能好多人在同时开发,测试、合并、上线进度都不同)时,比较麻烦,如果有多步测试分支,每个人总要跳出自己这次的feature所修改的文件、代码来进行一步步合并,容易出错。
4. Git
- 优点
- 分布式(只是有一个中央服务器用来交换代码,作为出版本的标准)
- 除了push等操作都不需要联网,相互之间影响小。
- 而且相当于自己有一个clone下来的库,有独自的一套分支、提交历史等,管理比较独立,commit和push也分开了
- 每个人都有完整的库,安全性高
- 使用TortoiseGit可以方便得进行操作,包括show history、cherry-pick等。
- cherry-pick可以挑选部分commit进行提交
- pull-request利于code review,结合cherry-pick后不像其他工具需要分别查看多次提交所含的多个文件,而且到主仓库上后也比较明晰。
- rebase
- 和Perforce、ClearCase、SVN相比,更适合于互联网开发(没有特定版本一起release features,有可能好多人在同时开发,测试、合并、上线进度都不同)
- 有ignore功能
- 缺点
* 概念、使用较复杂,尤其命令行