好文档 - 专业文书写作范文服务资料分享网站

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

天下 分享 时间: 加入收藏 我要投稿 点赞

版本管理RCS,cvs,svn,git比较

1,RCS(Revision Control System) 修订控制系统 特点: 1),简单

2),使用Lock机制防止多个开发人员对同一个文件同时进行修改.

2,CVS(Cocurrent Version System)并发版本系统 建立在RCS基础上,最流行的开放源代码版本控制系统 特点:

1),使用单一的主代码树,而不像RCS那样依赖多个目录.

2),最大优点在于多名开发人员可以同时对一个文件进行修改.允许合并. 这就\并发\开发.

3,SVN(SubVersion) 1)目录的版本控制

CVS 只能对文件进行版本控制,不能对目录进行版本控制.CVS 只能注意到,一个文件在一个位置被删除了,而在一个新位置创建了另外一个文件。由于它不会连接两个操作,因此也很容易使文件历史轨迹丢失

2) SVN可以原子性提交

CVS 采用线性、串行的批量提交,即依次地,一个接一个地执行提交,每成功提交一个文件,该文件的一个新的版本即被记录到版本库中,提交时用户提供的日志信息被重复地存储到每一个被修改的文件的版本历史中。

CVS 串行批量提交模式的弊端在于 -当任何原因造成批量操作的中断时(典型原因包

括:网络中断、客户端死机等),版本库往往处于一个不一致的状态:原本应该全部入库的文件只有一部分入库, 很有可能版本库中的最新版本不能顺利编译,更为严重的是,随着其他的用户执行cvs update 操作,该不一致性将迅速在开发团队中扩散,从而严重影响团队的开发效率,并存在质量隐患。另外,假如该批量提交的中断没有被及时发现,开发团队往往要花更 多的时间进行软件调试和排错。 4,Git

Git 是用于 Linux 内核开发的版本控制工具。与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持,使源代码的发布和交流极其方便。 Git 的速度很快,这对于诸如 Linux kernel 这样的大项目来说自然很重要。 Git 最为出色的是它的合并跟踪(merge tracing)能力。

git更加适合分布式开发项目。而svn(当然全称是subversion)则更适合于集中式大型开发项目。也有在git之上再使用一层svn的做法。

表1 CVS,Git,Mercurial,Subversion比较

特征 CVS Git Mercurial Subversion CVS: 没有. 是否原CVS提交不是Git: 是的. 提交都是原子的 子提交 原子的 Mercurial: 是的 Subversion: 提交都是原子的 CVS: 不是. 文件和重命名不支目录是持. 如果手动否可以进行, 可能会移动或损坏历史记重命名 录 Git: 支持重命名, 这是很实用的目的. git甚至能检测到重命名之后文件的改变. 尽管如此, Mercurial: 是基于特殊的存储结构, 重命名的, 重命名是支不会被显示的记录, git能够推持的 导出来(在实际使用中很容易做到) Subversion: 是的. 支持重命名 在移动或重命名之后智能合并 Git: 不支持. 细节在Git FAQCVS: 不能. 里: “Git有一个重命名的命令重命名都不git mv, 但是这仅仅是为了便支持, 就不必利. 效果和移掉某个文件, 增说智能了 加另外一个文件没有任何区别” Mercurial: 是的. 重命名之后智能合并是支持的. Mercurtial文档说“如果我:修改一个文件,而你重新命名了这个文件, 然后我们合并我们的变更, 那么我所做的修改就会被更新到根据旧文件名字而产生的新文件里(这可能就是你所期望的‘最简单的动作’, 但是不是所有版本控制系统都支持) Mercurtial: 是的. 支持拷贝 Subversion: 不支持. “svn help me“中提到“注意: 这个子命令相当于拷贝和删除.“并且可能有个bug 文件和目录拷贝 CVS: 不能. Git: 不能. 拷贝不支持 拷贝不支持 Subversion: 是的. 并且拷贝非常容易(O(1)). 包括产生分支 CVS: 间接的. 远程存可以使用储仓库Git: 是的. 是git的内部特征 John Polstra的备份 写的CVSup 是否传递变更到父仓库 Subversion: 间接的. 可以使用Chia-liang Kao的SVN::Mirror插件Mercurial: 是的 (好像是台湾人)或Shlomi Fish的SVN-Pusher工具 Subversion: 是的, 使用要么是Chia-Ling Kao的SVN::Mirror脚本或者Shlomi Fish的svn-push工具 CVS: 不会 Git: 是的(Linux内核开发过程经常使用这个特征) Mercurtial: 的 是仓库权限 CVS: 很有限. “pre-commit hook scripts“能够被用来实现各种权限控制系统 Mercutial: 是Git: 请看和Git一起附带的的. 它能够锁住contrib/hooks/update-paranoid. 仓库, 子目录或看和svnperms类似的者使用hooks后path_rules的代码 的文件 Mercurial: 是的. 变更集是支持的 Mercurial: 是的(hg annotate) Subversion: 是的. 基于HTTP权限的WebDAV-based模块能够支持基于目录级的仓库 CVS: 不是. Git: 是的. 是支持的, 创建他变更集 变更是基于们很容易 文件的 跟踪线CVS: 是的. 性的文Git: 是的.(git blame) cvs annotate 件历史 Subversion: 部分支持. 对于一次提交会隐式创建一个变更集 Subversion: 是的(svn blame)

3rrcl7sump9f98i84nwq
领取福利

微信扫码领取福利

微信扫码分享