原文地址:http://www.jianshu.com/p/f27a7ae1117b

CVS : Git : Mercurial : Subversion 的异同特征

是否原子提交

CVS: 没有. CVS提交不是原子的
Git: 是的. 提交都是原子的
Mercurial: 是的
Subversion: 提交都是原子的

文件和目录是否可以移动或重命名

CVS: 不是. 重命名不支持. 如果手动进行, 可能会损坏历史记录
Git: 支持重命名, 这是很实用的目的. git甚至能检测到重命名之后文件的改变. 尽管如此, 基于特殊的存储结构, 重命名不会被显示的记录, git能够推导出来(在实际使用中很容易做到)
Mercurial: 是的, 重命名是支持的
Subversion: 是的. 支持重命名

在移动或重命名之后智能合并

CVS: 不能. 重命名都不支持, 就不必说智能了
Git: 不支持. 细节在Git FAQ里: “Git有一个重命名的命令git mv, 但是这仅仅是为了便利. 效果和移掉某个文件, 增加另外一个文件没有任何区别”
Mercurial: 是的. 重命名之后智能合并是支持的. Mercurtial文档说:“如果我修改一个文件,而你重新命名了这个文件, 然后我们合并我们的变更, 那么我所做的修改就会被更新到根据旧文件名字而产生的新文件里(这可能就是你所期望的‘最简单的动作’, 但是不是所有版本控制系统都支持)
Subversion: 不支持. “svn help me“中提到“注意: 这个子命令相当于拷贝和删除.“并且可能有个bug

文件和目录拷贝

CVS: 不能. 拷贝不支持
Git: 不能. 拷贝不支持
Mercurtial: 是的. 支持拷贝
Subversion: 是的. 并且拷贝非常容易(O(1)). 包括产生分支

远程存储仓库的备份

CVS: 间接的. 可以使用John Polstra写的CVSup
Git: 是的. 是git的内部特征
Mercurial: 是的
Subversion: 间接的. 可以使用Chia-liang Kao的SVN::Mirror插件(好像是台湾人)或Shlomi Fish的SVN-Pusher工具

是否传递变更到父仓库

CVS: 不会
Git: 是的(Linux内核开发过程经常使用这个特征)
Mercurtial: 是的
Subversion: 是的, 使用要么是Chia-Ling Kao的SVN::Mirror脚本或者Shlomi Fish的svn-push工具

仓库权限

CVS: 很有限. “pre-commit hook scripts“能够被用来实现各种权限控制系统
Git: 请看和Git一起附带的contrib/hooks/update-paranoid. 看和svnperms类似的path_rules的代码
Mercutial: 是的. 它能够锁住仓库, 子目录或者使用hooks后的文件
Subversion: 是的. 基于HTTP权限的WebDAV-based模块能够支持基于目录级的仓库

变更集

CVS: 不是. 变更是基于文件的
Git: 是的. 是支持的, 创建他们很容易
Mercurial: 是的. 变更集是支持的
Subversion: 部分支持. 对于一次提交会隐式创建一个变更集

跟踪线性的文件历史

CVS: 是的. cvs annotate
Git: 是的.(git blame)
Mercurial: 是的(hg annotate)
Subversion: 是的(svn blame)

能够只在仓库的单目录下作用

CVS: 是的
Git: 不是. 尽管如此, 提交多少能被限制, 请看“Repository Permissions”
Mercurial: 能够基于某树的某个子集进行提交. 也有局部检出的能力
Subversion: 是的

跟踪未提交的变化

CVS: 是的. 通过cvs diff
Git: 是的. 另外, 分支在git里非常智能, 在某些工作流里能够被当成是另外一个未提交代码的存储库. 请看“git stash“命令
Mercurial: 是的. 使用hg diff
Subversion: 是的. 使用svn diff

基于单个文件的提交信息

CVS: 不是. 提交信息是基于单次变化的
Git: 是的. 提交信息基于变更集
Mercurial: 不是
Subversion: 不是. 没有这个特征

文档

CVS: 非常棒. 有很多在线的tutorials和资源, 在线的书籍. 命令行客户端也支持一个在线的帮助系统
Git: 良好. 短的帮助比较简洁难懂. man页很有分量, 但容易误解. 有很多tutorial
Mercurial: 很好. 有基于公司的书籍和wiki. 每个命令都集成了帮助
Subversion: 很好. 有一些在线的书籍和一些在线的tutorials和资源. 并且书籍是以docbook/xml写的所以很容易变换成其他格式. 命令行同样提供了在线的帮助系统

配置是否轻松

CVS: 好. 是个事实上的标准. 基于每个系统都有并且很容易配置
Git: 好. 在现有平台上二进制可用. 需要C编译器和Perl. 在windows上需要cygwin. 并有一些Unix特征
Mercurial: 非常好. 几乎所有平台都有二进制包. 从源码编译需要python2.3以上, 并且需要C编译器
Subversion: Subversion服务器需要安装在apache2模块里(如果有人希望HTTP作为底层协议的话)或使用它自身的服务器. 客户端需要Subversion特征的逻辑还有WebDAV库(针对HTTP). 安装组件很直接, 但是需要一些额外的工作(假定subversion在某些平台没有二进制包可用)

命令集

CVS: 包含了3个经常用到的命令的简单的命令集(cvs commit, cvs update和cvs checkout)和其它一些
Git: 命令集很丰富, 并且和CVS不兼容
Mercurial: 尝试模仿CVS交互方式, 但是偏离了基于不同的设计的意图
Subversion: 类CVS的命令集, 能够很容易被CVS用户使用

网络支持

CVS: 好. cvs在不同的场合使用不同的协议. 协议能够通过ssh链接的加密隧道进行
Git: 非常棒. 能够使用本地的git协议, 但也能在rsync, ssh, HTTP和HTTPS上使用
Mercurial: 非常棒. 使用HTTP或ssh. 远程访问会非常安全, 在只读网络里不需要上锁
Subversion: 非常好. Subversion服务器支持WebDAV+DeltaV(基于HTTP或HTTPS)作为底层协议, 或者它自身的协议同样能在ssh链接通道里使用.

可移植性

CVS: 好. 客户端能在UNIX, Windows和Mac OS上使用. 服务器端能在UNIX, 附有UNIX模拟层的Windows上使用
Git: 客户端运行在大多数的UNIX系统上, 但没有MS-Windows本地程序. 基于cygwin的系统看起来也能使用
Mercurial: 非常棒. 运行在基于所有能运行python的平台.仓库是兼容性的基于CPU结构和字节序的
Subversion: 非常好. 客户端和服务器端都能在UNIX, Windows和Mac OS X上运行

web接口

CVS: 是的. CVSweb, ViewVC, Chora和wwCVS
Git: 是的. Gitweb包含在发布包中
Mercurial: 是的. Web接口是内置组件
Subversion: 是的. ViewVC, SVN::Web, WebSVN, ViewSVN, mod_svn_view, Chora, Trac, SVN::RaWeb::Light, SVN Browser, Insurrection和perl_svn.另外, Subversion的apache服务也提供了一个基础的web接口

图形用户界面

CVS: 非常好. 有很多图形界面可以用: WinCVS, Cervisia(对于KDE), TortoiseCVS(Windows浏览器插件)
Git: Gitk包含在发行版中. Qqit和Git-gui工具也可使用
Mercurial: 通过hgit扩展查看历史; 检入扩展(hgct)使得提交很容易. 一些第三方的IDEs和GUI工具(如eric3, meld)有一些集成的Mercurial支持
Subversion: 非常好. 有很多GUIs可用: RapidSVN(跨平台), TortoiseSVN(Windows浏览器插件), Jsvn(java), 等. 大多数都还在开发中

几种VCS(版本控制系统)的特点和异同相关推荐

  1. 三种代码版本控制系统的简介 以及 SVN的安装

    三种代码版本控制系统的简介 以及 SVN的安装 一.三种代码版本控制系统 1.1 CVS 什么是cvs??? 1.2.Git 什么是Git??? 1.3.SVN 什么是SVN??? SVN的作用??? ...

  2. 22-07-14 西安 Git 分布式版本控制系统 、代码管理

    Git是目前世界上最先进的分布式版本控制系统,Git可以做源代码管理 Git的诞生 Linus (Linus Torvalds 林纳斯.托瓦斯)是在BitKeeper停止向开源社区提供免费版本后开发了 ...

  3. Git分布式版本控制系统(上)

    Git分布式版本控制系统(上) 链接:https://pan.baidu.com/s/1CgaEv12cwfbs5RxcNpxdAg 提取码:fytm 复制这段内容后打开百度网盘手机App,操作更方便 ...

  4. Git分布式版本控制系统

    Git分布式版本控制系统 git remote -v 查看仓库 一 企业高效持续集成平台场景介绍: 二,GIT分布式版本控制系统: 2.1 Git简介: 2.1.1 git是什么? Git在Wikip ...

  5. 各家版本控制系统(VCS)对比:VSS、SVN、Git。代码托管平台对比:GitLab、GitHub、码云(Gitee)、SourceForge、DevCloud(华为软件开发云)

    参考文章1:几种常用的版本控制系统优缺点比较 参考文章2:Git,GitLab,GitHub,SVN ,CVS,VSS,码云的安装,用法,区别,进阶

  6. 软件配置管理SCM和版本控制系统(VCS)

    1.  几个基本概念  SCM:软件配置管理,用来追踪和控制软件的变化的任务. SCI:软件配置项,软件中发生变化的基本单元(例如:文件). Baseline:基线,软件持续变化过程中的"稳 ...

  7. Git基础 1 ---- 版本控制系统的介绍

    1 Git 1 版本控制系统 vcs - version control system 2 版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统 3 版本控制系统的主要功能 1 ...

  8. 版本控制系统 之一 概念、分类、常见版本控制系统(CVS、SVN、BitKeeper、Git 等)

    是什么   版本控制系统(Version Control System,VCS)是一种软件,可以帮助软件团队的开发人员协同工作,并存档他们工作的完整历史记录. 为什么 在我们的实际开发过程中,经常会有 ...

  9. 分布式版本控制系统Mercurial(一):Mercurial基本功能介绍

    版本控制系统(Version Control System / Revision Control System,或者叫做源码控制系统Source Control System,以下简称VCS),是软件 ...

最新文章

  1. 怎么修改gif图片中的文字[实用]
  2. Nginx upstream的几种分配方式
  3. 小米造车150天:烈火烹油第一枪
  4. python日历下拉框_Python版的农历日历Calendar,功能简单
  5. 搜索引擎-倒排索引基础知识
  6. 【docker redis】Could not connect to Redis No route to host
  7. 惊了,电子元件还能这样玩?这是电子器件的艺术魅力
  8. 非常好的一篇关于MYSQL编码问题的文章
  9. (19)HTML5 <progress> 标签
  10. UltimateAndroid快速开发框架教程
  11. Linux面试必备20个常用命令
  12. 免费RDP报表工具试用感受
  13. JSP 创建 CRUD 示例 MyBatis DAO 用于数据库JSTL 用于遍历记录
  14. GitHub每月优秀热门项目推荐:2021年12月
  15. esp32 支持 sd卡 micropython 文件系统_ESP32/ESP8266 MicroPython教程:将文件上传到文件系统...
  16. 模拟器修改hosts解析
  17. 静态HTML网页设计作品 仿唯品会购物商城(5页) HTML+CSS+JavaScript 学生DW网页设计作业成品 商城网站设计
  18. 永远不怕IE主页地址被修改
  19. 大厂app出海攻略|一个方法让app推广变现能力双效提升
  20. 思维模型 黄金圈法则

热门文章

  1. 什么是《非经营性互联网信息服务备案核准》?怎么得到它?
  2. creo分割实体_Proe/Creo曲面分割·这个新功能你会用了吗?
  3. 数据链路层故障诊断与排除
  4. 深度丨为什么说元宇宙的发展是大势所趋,而不是偶然?
  5. 杨国安教授对企业生命周期的解读
  6. 如何利用PHP防范CC攻击
  7. 顶级AI科学家裴健加盟京东 领衔大数据与智慧供应链研发
  8. 2022-3-12 fcl库的内存分配
  9. 分区格式 linux,简析linux与win分区格式
  10. 霍尔传感器的制造工艺材料