版本控制工具演化、对比、总结

方面 Perforce ClearCase SVN Git
一句话总结 企业级版本化产品开发 企业级版本化产品开发 轻量级 分布式
简述
特色功能
可视化
平台

0. 演化

  • “人肉”版本管理
    • 通过在文件命名上增加自定义版本号、描述的方式来维护多个版本的文件/文件夹
  • 简单的集中式版本管理
    • 比如VCS
    • 改进
      • 实现了同一文件或文件夹的版本控制、历史、回退功能
    • 仍存在的问题
      • 但客户端要实时与服务端通信,同一文件只有一个人可以checkout进行修改,然后再checkin
  • 复杂的集中式版本管理
    • 如SVN、CVS
    • 改进
      • 不再锁文件,大家都可以checkout后修改,但要有合并的功能
      • 支持分支功能,可以多版本并行
    • 仍存在的问题
      • 大家要抢着提交,但还是可能错过别人的更新,导致没有先合并而覆盖别人的代码
  • 分布式版本管理
    • 如Git
    • 改进
      • 客户端不再需要实时和服务端通信,支持先本地提交,避免覆盖别人的改动
      • 支持审批功能
  • 社交化分布式版本管理
    • 如Github

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功能
  • 缺点
    * 概念、使用较复杂,尤其命令行
原文地址:https://www.cnblogs.com/wyp1988/p/9996097.html