GIT → 02:Git和Svn比较
2.1 SVN介绍
2.1.1 SVN简介
SVN 属于集中式版本管理控制系统,服务器中保存了所有文件的不同版本,而协同工作人员通过连接svn服务器,提取出最新的文件,获取提交更新。Subversion 项目的初衷是为了替换当年开源社区最为流行的版本控制软件CVS,在CVS的功能的基础上有很多的提升同时也能较好的解决CVS系统的一些不足。
2.1.2 SVN基本交互流程图
2.1.3 SVN缺点
集中管理方式在一定程度上看到其他开发人员在干什么,而管理员也可以很轻松掌握每个人的开发权限。但是相较于其优点而言,集中式版本控制工具缺点很明显:
服务器单点故障必须连接在SVN服务器上,否则不能提交、对比、还原等
2.2 Git 介绍
2.2.1 Git与Svn记录具体差异
- Git 和其他版本控制系统的主要差别在于,Git 只关心文件的整体是否发生变化。而SVN这类版本控制系统则只关心文件内容的具体差异。
- SVN这类系统每次记录有哪些文件作了更新,以及都更新了哪些行的什么内容。然而 Git 并不保存这些前后变化的差异数据。
- 实际上,Git更像是把变化的文件作一个快照后,记录在一个微型的文件系统中。每次提交更新时,它会纵览一遍所有文件的指纹信息(Hash值)并对文件作一快照,然后保存一个指向这次快照的索引。为提高性能,若文件没有变化,Git 不会再次保存,而只对上次保存的快照作一链接。
2.2.2 Git的优势是什么
- 分布式,强调个体
- 公共服务器压力和数据量都不会太大
- 离线工作,每个人的本地仓库,大部分操作在本地库完成,不需要联网(SVN做不到)
- 分支操作非常快捷流畅(重点介绍)
- 可以吃后悔药, 尽可能添加数据而不是删除或修改数据(删除或修改不容易恢复,而每次添加一个版本,历史版本都有)
- 速度快、灵活, 有能力高效管理类似 Linux
- 内核一样的超大规模项目(速度和数据量)
2.2.3 Git 历史发展
- 同生活中的许多伟大事件一样,Git 诞生于一个极富纷争大举创新的年代。
一开始 linus(莱纳斯)本人手动合并代码,Linux 开源项目有着来自世界各地的开发者参与,绝大多数的 Linux维护工作都花在了提交补丁和保存归档的繁琐事务上(1991-2002年间)。
- 到 2002 年,商业软件 Bitkeeper 出于人道语义精神,授权给linux免费使用,要求是不能进行破解。于是整个项目组开始启用分布式版本控制系统 BitKeeper 来管理和维护代码。
- 到 2005 年的时候,linux社区开发者试图破解BitKeeper协议,但是被公司发现了,于是开发 BitKeeper 的商业公司同 Linux 内核开源社区的合作关系结束,他们收回了免费使用 BitKeeper 的权力。
这就迫使 Linux 开源社区(特别是 Linux的缔造者 Linus )不得不吸取教训,于是 莱纳斯 自已用C语言开发了一套属于自己的版本控制系统,不至于重蹈覆辙。Git主体程序只发了两周,一个月后linux系统代码由git管理。
- 2008年,Github上线了,很多开源软件都放在Github上进行公布:Linux,Android, jQuery, Ruby,PHP,vue.js… 目前使用Git的项目数量也已经超过了使用SVN的仓库数。