几款版本控制工具SVNGITCVS及Mercurial的比较文档格式.docx
- 文档编号:13165037
- 上传时间:2022-10-07
- 格式:DOCX
- 页数:6
- 大小:18.96KB
几款版本控制工具SVNGITCVS及Mercurial的比较文档格式.docx
《几款版本控制工具SVNGITCVS及Mercurial的比较文档格式.docx》由会员分享,可在线阅读,更多相关《几款版本控制工具SVNGITCVS及Mercurial的比较文档格式.docx(6页珍藏版)》请在冰豆网上搜索。
CVS只能对文件进行版本控制,不能对目录进行版本控制.CVS只能注意到,一个文件在一个位置被删除了,而在一个新位置创建了另外一个文件。
由于它不会连接两个操作,因此也很容易使文件历史轨迹丢失
2)SVN可以原子性提交
CVS采用线性、串行的批量提交,即依次地,一个接一个地执行提交,每成功提交一个文件,该文件的一个新的版本即被记录到版本库中,提交时用户提供的日志信息被重复地存储到每一个被修改的文件的版本历史中。
CVS串行批量提交模式的弊端在于-当任何原因造成批量操作的中断时(典型原因包括:
网络中断、客户端死机等),版本库往往处于一个不一致的状态:
原本应该全部入库的文件只有一部分入库,很有可能版本库中的最新版本不能顺利编译,更为严重的是,随着其他的用户执行cvsupdate操作,该不一致性将迅速在开发团队中扩散,从而严重影响团队的开发效率,并存在质量隐患。
另外,假如该批量提交的中断没有被及时发现,开发团队往往要花更多的时间进行软件调试和排错。
4,Git
Git是用于Linux内核开发的版本控制工具。
与常用的版本控制工具CVS,Subversion等不同,它采用了分布式版本库的方式,不必服务器端软件支持,使源代码的发布和交流极其方便。
Git的速度很快,这对于诸如Linuxkernel这样的大项目来说自然很重要。
Git最为出色的是它的合并跟踪(mergetracing)能力。
git更加适合分布式开发项目。
而svn(当然全称是subversion)则更适合于集中式大型开发项目。
也有在git之上再使用一层svn的做法。
表1CVS,Git,Mercurial,Subversion比较
特征
CVS
Git
Mercurial
Subversion
是否原子提交
CVS:
没有.CVS提交不是原子的
Git:
是的.提交都是原子的
Mercurial:
是的
Subversion:
提交都是原子的
文件和目录是否可以移动或重命名
不是.重命名不支持.如果手动进行,可能会损坏历史记录
支持重命名,这是很实用的目的.git甚至能检测到重命名之后文件的改变.尽管如此,基于特殊的存储结构,重命名不会被显示的记录,git能够推导出来(在实际使用中很容易做到)
是的,重命名是支持的
是的.支持重命名
在移动或重命名之后智能合并
不能.重命名都不支持,就不必说智能了
不支持.细节在GitFAQ里:
“Git有一个重命名的命令gitmv,但是这仅仅是为了便利.效果和移掉某个文件,增加另外一个文件没有任何区别”
是的.重命名之后智能合并是支持的.Mercurtial文档说:
“如果我修改一个文件,而你重新命名了这个文件,然后我们合并我们的变更,那么我所做的修改就会被更新到根据旧文件名字而产生的新文件里(这可能就是你所期望的‘最简单的动作’,但是不是所有版本控制系统都支持)
不支持.“svnhelpme“中提到“注意:
这个子命令相当于拷贝和删除.“并且可能有个bug
文件和目录拷贝
不能.拷贝不支持
Mercurtial:
是的.支持拷贝
是的.并且拷贝非常容易(O
(1)).包括产生分支
远程存储仓库的备份
间接的.可以使用JohnPolstra写的CVSup
是的.是git的内部特征
间接的.可以使用Chia-liangKao的SVN:
:
Mirror插件(好像是台湾人)或ShlomiFish的SVN-Pusher工具
是否传递变更到父仓库
不会
是的(Linux内核开发过程经常使用这个特征)
是的,使用要么是Chia-LingKao的SVN:
Mirror脚本或者ShlomiFish的svn-push工具
仓库权限
很有限.“pre-commithookscripts“能够被用来实现各种权限控制系统
请看和Git一起附带的contrib/hooks/update-paranoid.看和svnperms类似的path_rules的代码
Mercutial:
是的.它能够锁住仓库,子目录或者使用hooks后的文件
是的.基于HTTP权限的WebDAV-based模块能够支持基于目录级的仓库
变更集
不是.变更是基于文件的
是的.是支持的,创建他们很容易
是的.变更集是支持的
部分支持.对于一次提交会隐式创建一个变更集
跟踪线性的文件历史
是的.cvsannotate
是的.(gitblame)
是的(hgannotate)
是的(svnblame)
能够只在仓库的单目录下作用
不是.尽管如此,提交多少能被限制,请看“RepositoryPermissions”
能够基于某树的某个子集进行提交.也有局部检出的能力
跟踪未提交的变化
是的.通过cvsdiff
是的.另外,分支在git里非常智能,在某些工作流里能够被当成是另外一个未提交代码的存储库.请看“gitstash“命令
是的.使用hgdiff
是的.使用svndiff
基于单个文件的提交信息
不是.提交信息是基于单次变化的
是的.提交信息基于变更集
不是
不是.没有这个特征
文档
非常棒.有很多在线的tutorials和资源,在线的书籍.命令行客户端也支持一个在线的帮助系统
良好.短的帮助比较简洁难懂.man页很有分量,但容易误解.有很多tutorial
很好.有基于公司的书籍和wiki.每个命令都集成了帮助
很好.有一些在线的书籍和一些在线的tutorials和资源.并且书籍是以docbook/xml写的所以很容易变换成其他格式.命令行同样提供了在线的帮助系统
配置是否轻松
好.是个事实上的标准.基于每个系统都有并且很容易配置
好.在现有平台上二进制可用.需要C编译器和Perl.在windows上需要cygwin.并有一些Unix特征
非常好.几乎所有平台都有二进制包.从源码编译需要python2.3以上,并且需要C编译器
Subversion服务器需要安装在apache2模块里(如果有人希望HTTP作为底层协议的话)或使用它自身的服务器.客户端需要Subversion特征的逻辑还有WebDAV库(针对HTTP).安装组件很直接,但是需要一些额外的工作(假定subversion在某些平台没有二进制包可用)
命令集
包含了3个经常用到的命令的简单的命令集(cvscommit,cvsupdate和cvscheckout)和其它一些
命令集很丰富,并且和CVS不兼容
尝试模仿CVS交互方式,但是偏离了基于不同的设计的意图
类CVS的命令集,能够很容易被CVS用户使用
网络支持
好.cvs在不同的场合使用不同的协议.协议能够通过ssh链接的加密隧道进行
非常棒.能够使用本地的git协议,但也能在rsync,ssh,HTTP和HTTPS上使用
非常棒.使用HTTP或ssh.远程访问会非常安全,在只读网络里不需要上锁
非常好.Subversion服务器支持WebDAV+DeltaV(基于HTTP或HTTPS)作为底层协议,或者它自身的协议同样能在ssh链接通道里使用.
可移植性
好.客户端能在UNIX,Windows和MacOS上使用.服务器端能在UNIX,附有UNIX模拟层的Windows上使用
客户端运行在大多数的UNIX系统上,但没有MS-Windows本地程序.基于cygwin的系统看起来也能使用
非常棒.运行在基于所有能运行python的平台.仓库是兼容性的基于CPU结构和字节序的
非常好.客户端和服务器端都能在UNIX,Windows和MacOSX上运行
web接口
是的.CVSweb,ViewVC,Chora和wwCVS
是的.Gitweb包含在发布包中
是的.Web接口是内置组件
是的.ViewVC,SVN:
Web,WebSVN,ViewSVN,mod_svn_view,Chora,Trac,SVN:
RaWeb:
Light,SVN
Browser,Insurrection和perl_svn.另外,Subversion的apache服务也提供了一个基础的web接口
图形用户界面
非常好.有很多图形界面可以用:
WinCVS,Cervisia(对于KDE),TortoiseCVS(Windows浏览器插件)
Gitk包含在发行版中.Qqit和Git-gui工具也可使用
通过hgit扩展查看历史;
检入扩展(hgct)使得提交很容易.一些第三方的IDEs和GUI工具(如eric3,meld)有一些集成的Mercurial支持
非常好.有很多GUIs可用:
RapidSVN(跨平台),TortoiseSVN(Windows浏览器插件),Jsvn(java),等.大多数都还在开发中
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 版本 控制 工具 SVNGITCVS Mercurial 比较