zl程序教程

您现在的位置是:首页 >  工具

当前栏目

SVN和Git优劣对比

Git 对比 svn 优劣
2023-09-14 09:15:30 时间

版本管理工具的前期调研—SVN和Git

1 SVN和Git工具简介

SVN是Subverion的简称,Subversion 是一个 “集中式” 的信息共享平台,他的核心部分是数据中央仓库(Repository)。因此,在SVN搭建过程中,必须首先在实验室机器上安装SVN服务器端程序,并在服务器上创建数据总仓库,然后在它下面根据不同的任务创建子仓库,最终形成一种树状结构。
Git 是一个免费的、开源的分布式版本控制系统。可以快速高效地处理从小型到大型的各种项目。它具有廉价的本地库,方便的暂存区域和多个工作流分支等特性。其性能优于 Subversion、CVS、Perforce 和 ClearCase 等版本控制工具。

2 SVN和Git的区别

集中式版本控制系统:所有的版本库是放在中央服务器中的,也就是说我们每一次的修改上传都是保存在中央服务器中的。中央服务器就是个大仓库,大家把产品代码都上传里面,每一次需要改进和完善的时候,需要去仓库里面把文件给提出来,然后再操作。
分布式版本控制系统:分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库。使用分布式版本控制系统,我们平时工作的时候,就不需要联网了,因为版本库就在自己的电脑上。对于多人协作,比方说你在自己电脑上改了文件 A,你的同事也在他的电脑上改了文件 A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。

在这里插入图片描述

3优缺点说明

3.1 SVN相较于Git的优势

1.卓越的架构性能
支持像 SVN 这样的集中式版本控制架构的一件事是,它可以有效地处理网络流量并确保团队和开发人员之间的同步。
当使用 SVN 时,您只需要同步本地和服务器上最新内容之间的差异。这比使用 Git 快得多。由于它是分布式的,您必须下载所有更改,即使这些更改添加了数千兆字节的无用资产,这些资产已从分支中删除。这是一种浪费,尤其是当您在拥挤的网络上工作并且在存储库同步时。

2.更好地处理二进制文件
也许 SVN 与 Git 相比最无可争议的优势在于它处理二进制文件的方式。这种优势的原因是 Subversion 为 Lock-Modify-Unlock 模型提供的支持。它是在 SVN 中使用 lock 命令(svn:needs-lock 属性)实现的,而Git由于其分布式特性根本不提供独占文件锁定。
对于代码库中具有多个不可合并二进制资产的企业项目,这是一个真正的交易破坏者,通常也是他们选择坚持使用 SVN 的原因。

3.可用性和易用性
所有同时掌握 Git 和 SVN 的开发者都必须承认,Git 的命令实在太多了,日常工作需要掌握add,commit,status,fetch,push,rebase等,若要熟练掌握,还必须掌握rebase和merge的区别,fetch和pull的区别等,除此之外,还有cherry-pick,submodule,stash等功能。
在易用性这方面,SVN简单易上手,对新手很友好。但是从另外一方面看,Git 命令多意味着功能多,用处广泛。

3.2 Git相较于SVN的优势

1.版本库本地化,支持离线提交,相对独立不影响协同开发
Git 的分布式特性确保可以在本地且独立于主存储库推送和提交代码。这使得 Git 版本控制不仅减轻了网络流量,而且还确保独立于中央服务器。
每个开发者都拥有自己的版本控制库,在自己的版本库上可以任意的执行提交代码、创建分支等行为。例如,开发者认为自己提交的代码有问题?没关系,因为版本库是自己的,回滚历史、反复提交、归并分支并不会影响到其他开发者。

2.把内容按元数据方式存储,完整克隆版本库
所有版本信息位于.git目录中,它是处于你的机器上的一个克隆版的版本库,它拥有中心版本库上所有的东西,例如标签、分支、版本记录等。

3.分布式版本库,无单点故障,内容完整性好
内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。

4.支持快速切换分支方便合并,比较合并性能好
在同一目录下即可切换不同的分支,方便合并,且合并文件速度比SVN快。

参考 百度百科

补充以下内容:

SVN简介

SVN是subvision的简称,是一个开放源代码的版本控制系统,支持大多数常见的操作系统。作为一个开源的版本控制系统,subvision管理着随时间改变的数据。这些数据放置在一个中央资料档案(repository)库中。这个档案库很像一个普通的文件服务器,不过它会记住每一次文件的变动。这样你就可以把档案恢复到旧的版本,或是浏览文件的变动历史。Subverion是一个通用的系统,可用来管理任何类型的文件,其中包括程序源码。

SVN采用客户端/服务器体系,项目的各种版本都存储在服务器上,程序开发人员首先将从服务器上获得一份项目的最新版本,并将其复制到本机,然后在此基础上,每个开发人员可以在自己的客户端进行独立的开发工作,并且可以随时将新代码提交给服务器。当然也可以通过更新操作获取服务器上的最新代码,从而保持与其他开发者所使用版本的一致性。

SVN的客户端有两类,一类是基于Web的WebSVN等,另一类是以Tortoise SVN为代表的客户端软件。前者需要Web服务器的支持,后者需要用户在本地安装客户端,两种都有免费的开源软件供使用。SVN存储版本数据也两种方式:BDB(一种事务安全型表类型)和FSFS(一种不需要数据库的存储系统)。因为BDB方式在服务器中断时,有可能锁住数据,所以还是FSFS方式更安全一点。

SVN工作机制

SVN系统具体是如何实现对项目软件的版本控制,一方面通过实现历史操作记录查阅。在任意一台服务器中都可以添加一个SVN版本库,而相应的版本库中存放大量的程序和文档,而这些项目资源主要通过配置管理员依据不同的配置管理计划对不同项目的组员分配与之相符合的访问权限,进而实现对资源的统一管理;只有SVN标本过版本库中的资源,项目组成员可以对版本资源库中的资源进行访问。

一次简单的访问过程包括:相关项目组员首先在客户操作端建立一个从版本库检索出来的项目文件,而后就可以对拷贝的档案进行修改,最后通过SVN提交命令将其修改后的项目文件提交到终端服务器,终端服务器最终会对修改后的项目文件做最后的综合更新记录

修改过的文件在修改未被提交到服务器前,SVN服务器只会对已经提交到网络端服务器的项目文档进行更新审核,并与其他人的合并,在此之前修改过的文档是保密的,提交之后SVN络端服务器会将修改后与修改之前的数据进行比较,并在后台对修改内容就行标注显示,进而实现对历史操作记录的更新记载。最终实现项目组组员既能检索出旧版本,又能通过SVN实现新旧版本的对比,另一方面SVN通过进行组员间的协同开发实现对项目软件的版本控制。协同开发一般是指版本控制系统间接受并处理不同用户提交的各种不同性质版本的资源代码,同时允许各个用户之间在遵循相应规则范围内实现合作开发。如何处理好有矛盾的版本控制系统才是能够协同开发的关键,像是多个程序编码员同时对同一份资源代码进行修改、提交到SVN版本库,就有可能发生提交后的版本意见想法相冲等问题

SVN的优势

1 存储

SVN服务器既具有CVS所具有数据储存的优点,像是信息资源存储后会形成资源树结构,便于存储的同时,数据一般不会丢失,同时又拥有自己的特色。SVN是通过关系数据库及二进制的存储方式,同时解决了既往不能同时读写同一文件等问题,同时增添了自己特有的“零或一”原则。

2 速度

与人们初始的CVS相比,SVN在速度运行方面有很大提升。因为SVN服务器只支持少量的信息、资源传输,与其他系统相比,更支持的是离线模式,因此避免了网络拥挤现象的出现。

3 安全性

SVN是一种技术性更加安全的产品,实现了系统和控制两方面的结合。一方面可以将系统整体的安全功能有效地分布在分支系统中,进而保证分支系统能正常运行,从而使各分支系统能够互补,最终在系统整体性的安全性得以保障,通过均衡原则实现最终追求安全的目的。

SVN版次

Subversion使用**“偶数/奇数”版次模式**。偶数编号的小数点版次(1.0、1.2等)被认为是稳定的版次。这样的版次只针对问题的修正才会变动,不会增加新功能,而且用户会期待使用的软件没问题。相反地,奇数编号的小数点版次(1.1、1.3等)是开发(development)版本。在这样的版本中会增加新功能,它们倾向于快速的变更与变革,且有可能会有使得数据遗失的缺陷或问题。如果稳定性与数据保存性对你而言是重要的,则你应该使用偶数编号的版次。