`

CVS,GIT,Mercurial和SVN比较

阅读更多

 

最近关于DVCS讨论的如火如荼,转一篇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, SVNBrowser, 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), 等. 大多数都还在开发中

 

来源:

http://www.cnblogs.com/likebeta/archive/2012/12/18/2822805.html

 

分享到:
评论

相关推荐

    几款版本控制工具SVN、GIT、CVS及Mercurial的比较.pdf

    几款版本控制工具SVN、GIT、CVS及Mercurial的比较.pdf

    版本控制系统git的基本使用及ssh密钥的创建与添加

    常见的版本控制系统有CVS、Git、 Mercurial、Subversion等,目前用得多、主流的版本控制系统主要是svn和git,我们可以自己在Linux和Windows搭建相应 的svn或git服务器,有兴趣可以百度搜索相关文档解决。当然...

    Git实践操作技术详解

    流行的软件版本开源管理软件,有CVS、SVN、TFS、Git以及Mercurial 等工具。Git与其他VCS有什么本质不同?可能最明显的区别是Git是分布式的(这和SVN或TFS不同)。这意味着,你将拥有一个本地存储库,该存储库位于名...

    Mercurial-2.2.1-x64 - 轻量级版本控制器

    一款比SVN,CVS,GIT更加轻量级的版本控制器,相应安装步骤还未更新进去,附带有相关学习资料

    Git代码提交流程及git命令汇总(基础篇)

    已经有一系列的版本控制系统,比如SVN, Mercurial, Perforce, CVS, Bitkeepe等等。 Git是分布式的,这意味着它并不依赖于中心服务器,任何一台机器都可以有一个本地版本的控制系统,我们称之为仓库。如果是多人协作...

    VSCode:msys和gdb

    MinGW里没有包含GDB,用于VScode配置环境。 1.msys+7za+wget+svn+git+mercurial+cvs-rev13 2.gdb8.1和gdb7.7

    Personal-Website

    建立投资组合我建立了一个React灵敏的网站,该网站整洁地展示... 有许多版本控制系统,例如Git,Mercurial,CVS和SVN。 Git是业界最流行和使用最广泛的版本控制系统。 阅读有关以下内容的更多信息:Git入门Git是用于大

    PersonalWebsite

    建立投资组合 我建立了一个React灵敏的网站,该网站整洁地... 有许多版本控制系统,例如Git,Mercurial,CVS和SVN。 Git是业界最流行和使用最广泛的版本控制系统。 阅读有关以下内容的更多信息: Git入门 Git是用于大

    dvcs-ripper:Rip Web可访问(分布式)版本控制系统:SVNGITHG ..

    Rip Web可访问(分布式)版本控制系统:SVN,GIT,Mercurial / hg,bzr,... 即使关闭目录浏览,它也可以翻录存储库。 确保将自己置于要下载/克隆存储库的空目录中。 要求 Perl Perl模块: 必需:LWP,IO :: ...

    Git历险

    传统的SVN、CVS等版本控制系统,只有一个仓库(repository),用户必须要连上这个仓库才能开始提交;而Git之类的分布式版本控制系统(当然也还包括BitKeeper、Mercurial等等),它的每个工作目录都包含一个完整的仓库...

    Gource:软件版本控制可视化-开源

    Gource 包括对 Git、Mercurial、Bazaar 和 SVN 的内置日志生成支持。 Gource 还可以解析多个第三方工具为 CVS 存储库生成的日志。 Gource 是源代码控制存储库的可视化工具。 存储库显示为树,其中存储库的根为中心...

    tinykactl:kth的小型存储库

    修订历史可以追溯到2002年,涵盖了四个不同的版本控制系统(CVS-> BitKeeper-> CVS-> SVN-> git;不包括用于较新KACTL的Mercurial)。 可以在找到现代的KACTL; 它的doc/historical/目录包含多个从各个时间点显示的...

    Redmine 架設

    (j)SCM integration (SVN, CVS, Git, Mercurial, Bazaar and Darcs): SCM整合 (k)Issue creation via email: 透過Email新增Issue (l)Multiple LDAP authentication support: 支援各式LDAP (m)User self-registration...

    dotemacs:我的 GNUEmacs 配置

    Git:用于包下载和 magit。 Mercurial:用于包下载。 SVN:用于包下载。 leiningen 2.x:用于 nrepl 和朋友。 python(2.6 或 2.7):用于构建绝地。 有关避免某些要求的方法,请参阅“禁用包”部分。 Arch ...

Global site tag (gtag.js) - Google Analytics