git和svn的区别

Posted miaozhihang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了git和svn的区别相关的知识,希望对你有一定的参考价值。

Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.

1.git
git官网https://git-scm.com/ 官网上是这么介绍的:
Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.
git是一个开源的分布式版本控制系统,用以快速高效的处理项目从很小到非常大的项目的版本控制的所有事情。
另外官网上的介绍还有,git性能卓越,超过甚至颠覆一些其他的产品如cvs,perfamce等,git有非常方便的本地分支,多个工作流等。
2.git和svn的比较
git和svn是目前最常用的团队协作的版本控制系统。下面我们从版本控制系统的
以下的1,2,3也正是版本控制的演进历史:
①本地版本控制系统:(解决个人的版本管理)
很多人的选择的版本控制方法是将文件复制到另一个目录(可能是一个时间标记的目录,如果他们是聪明)。这种做法是很常见的,因为它是如此简单,但是很容易出错,比如很容易忘了你是哪个目录,不小心写了错误的文件等等。
为了解决这个问题,程序员早就开发了VCSS具有该保留所有文件的更改版本控制下的一个简单的数据库。

技术分享图片

但是这种版本控制会丢失。毕竟是本地的。

②集中式版本控制:(svn是这种形式)

人们遇到的下一个主要问题是,他们需要与其他系统上的开发者合作。为了解决这个问题,出现了集中式版本控制系统(CVCSs)的开发工作。集中式版本控制系统,如CVS,Subversion和Perforce的,有一个包含所有版本文件的单个服务器和一个数字(版本号),众多客户端从这个server上去检出文件(只是文件,本地没有仓库的概念)。 多年以来,这已经成为版本控制的标准。

技术分享图片

 

 

但是集中式的版本控制,有个严重的缺陷。就是中央服务器的单点故障。如果服务宕机一个小时,在这期间,没有任何人可以在正在工作的版本上很好的合作或者去保存某一个版本的改变。另外如果中央数据库的磁盘坏了,并且可能没有保存备份,那么将丢失所有的东西。你失去了绝对一切 - 除了单一的任何人的快照恰好有在本地计算机上项目的整个历史。当然本地的版本控制系统也有相同的问题。虽然,你能够把每个人的本地代码,进行合并得到一个相对完整的版本,但是当你把这个相对完整的版本重新部署到服务器的新仓库时,将会丢失所有的历史版本包括日志。

③分布式版本控制:(git是这种形式,GIT跟SVN一样有自己的集中式版本库或服务器)

这是在分布式版本控制系统(DVCSs)步在DVCS(如GIT中),客户端不只是检查出文件的最新快照:他们完全镜像的存储库(本地有仓库,这就是分布式的意义)。因此,如果出现上述问题,任何客户机库的可复制备份到服务器,以恢复它。每一个克隆确实是所有数据的完整备份(除了没有push的代码,这个也是理所当然的)。

那么针对于本地版本控制系统,和集中式版本控制系统的最严重的缺陷,就被分布式版本控制系统解决了。

 
技术分享图片
 

另外类似git这样的分布式版本管理系统,能更好的去处理你在多个远程仓库上的工作。这样是你可以同时去和多个团队去写作开发。这允许您设置几种类型的工作流,这些集中式版本控制系统是做不到的。比如说分层模型。

对比结果:

1.git是分布式的scm,svn是集中式的。(最核心)

2.git是每个历史版本都存储完整的文件,便于恢复,svn是存储差异文件,历史版本不可恢复。(核心)

3.git可离线完成大部分操作,svn则不能。

4.git有着更优雅的分支和合并实现。

5.git有着更强的撤销修改和修改历史版本的能力

6.git速度更快,效率更高。

 

基于以上区别,git有了很明显的优势,特别在于它具有的本地仓库。











以上是关于git和svn的区别的主要内容,如果未能解决你的问题,请参考以下文章

Git和Svn的区别有哪些?

GIT和SVN的区别

工具Git 与 SVN 区别

GIT和SVN之间的五个基本区别

Git和SVN之间的区别

git 和svn有什么区别?怎么体现git是分布式的呢?