4个著名VCS的比较
| 特征 | 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), 等. 大多数都还在开发中 |
4个著名VCS的比较的更多相关文章
- Android Studio的SVN Performing VCS Refresh/Commit 长时间不结束
给Android Studio项目里面的一个文件改名以后,再提交SVN时总是提示冲突,没办法解决.再后来不知道怎么弄的,每次提交时停留在SVN Performing VCS Refresh始终都不会完 ...
- SNMP协议以及著名的MIB详解
SNMP协议介绍 简单网络管理协议(SNMP:Simple Network Management Protocol)是由互联网工程任务组(IETF:Internet Engineering Task ...
- 著名的sql注入问题-问题的原因分析及总结
Statement安全漏洞(sql注入问题)问题展示: 首先我的Mysql数据库中有一张users表,如下图所示 /** * 根据用户名查询用户 * @param username 需要查询的用户名 ...
- 【原创】高性能网络编程(二):上一个10年,著名的C10K并发连接问题
1.前言 对于高性能即时通讯技术(或者说互联网编程)比较关注的开发者,对C10K问题(即单机1万个并发连接问题)应该都有所了解."C10K"概念最早由Dan Kegel发布于其个人 ...
- Jquery,YUI这个著名js库名称作用的理解
看廖雪峰大神的教程,其中讲到变量作用域问题.在命名空间中,写到:因为全局变量绑到了window上,不同的js文件访问相同全局变量或者定义了相同名字的顶层函数,都会造成命名冲突,并且很难被发现. 减少冲 ...
- 国内外著名B2C系统介绍兼比较ASP.NET和PHP
国内外著名B2C系统介绍兼比较ASP.NET和PHP 2010-06-08 11:44 来源: 我来投稿 我要评论 中介交易 SEO诊断淘宝客 站长团购 云主机 A5外包 国内外著名 ...
- C++著名程序库的比较和学习经验 (转)
转自:http://www.open-open.com/lib/view/open1328670468108.html 内容目录: 1.C++各大有名库的介绍——C++标准库 2.C++各大有名库的介 ...
- android studio如何开启与禁用版本控制vcs
1.开启
- VCS仿真查看coverage
VCS仿真查看coverage Design compiler & simulate #!/bin/csh -f setenv NOVAS_HOME /EDASynopsys/verdi3-I ...
随机推荐
- LruCache DiskLruCache 缓存 简介 案例 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- Voice Commands (VCD) Cortana 微软小娜示例
Cortana 样品 您可以创建自定义功能Cortana使用Cortana技能装备或遗留的声音命令(VCD)平台. 在这里,你可以找到相关的样品: Cortana技能装备 目前Cortana技巧是建立 ...
- iphone系统更新 3002错误
一:错误原因 与苹果服务器通信连接错误 二:解决 windows下:c:/windows/system32/drivers/etc 修改里面的hosts文件 去掉和apple.com相关的 三:ios ...
- KineticJS教程(11)
KineticJS教程(11) 作者: ysm 11.对象的上下关系 11.1.层的上下关系 Kinetic的层是按照添加到舞台的次序,由下向上排列,上层遮盖下层的图形.每个层各自有一个ZIndex编 ...
- 算法笔记_027:俄式乘法(Java)
1 问题描述 首先,了解一下何为俄式乘法?此处,借用<算法设计与分析基础>第三版上一段文字介绍: 2 解决方案 具体编码如下: package com.liuzhen.chapter4; ...
- Jquery重新学习之七[Ajax运用总结A]
Jquery中Ajax的运用是另外一个重点,平时项目经常会用它进行一些异步操作:其核心是通过XMLHttpRequest对象以一种异步的方式,向服务器发送数据请求,并通过该对象接收请求返回的数据,从而 ...
- Jquery重新学习之四[核心属性与文档处理属性]
1:核心.each(callback),size(),length(),get([index]) 1.1 .each(callback)通过它可以遍历对象.数组的属性值并进行处理 <form i ...
- Ajv JSON数据格式校验 使用
1.官网 https://ajv.js.org/ 2.示例代码 <!DOCTYPE html> <html lang="zh"> <head> ...
- Android APP安装后不在桌面显示图标的应用场景
一般情况下是由于特殊情况下,需要隐藏app的启动入口,即在launcher界面不需要显示该入口,会由其他app跳转至.怎么设置如下代码: <activity android:name=" ...
- CentOS7——gitlab本地git仓库搭建 以及web hook配置
整个搭建用的都是各种默认设置,所以没有用到高深的的东西,比较简单,比较傻瓜式,这篇也仅仅是一个入门. 另外本文具有时效性,浏览本文请注意发表时间,为防止过时产生误导,本文尽量把 “如何得知应该这样做” ...