Git学习——Git简介
1.什么是Git
Git是一个开源的分布式版本控制系统。
2.什么是版本控制系统
这里我举个例子来说明版本控制。
大学毕业之前每一个都会经历一个痛苦的过程---------论文。论文从开题到终稿必定会修改多次。每一次修改都会是一个版本,如果想删除论文中的一个段落,又怕这一段还会再次添加上怎么办?就只有把当前的文件保存,然后复制一份重新修改,修改完之后导师会再次审核,发现还有问题,然后又把修改过的论文再次保存着,重新复制一份再次修改,直到论文通过导师审核。当你定稿以后会发现word文档被复制了很多份,这每一份都是一个新的版本。如下图:在撰写论文过程中,如果你想要把以前删除的段落或者其他重新添加,如果已经记不到删除的段落是在那个word文档中就得一个个去查看文件,这真的是非常痛苦的。
如果导师给给出了一些批注或者帮助修改了论文,当拿到导师发给的文档后,我们还需要查到导师修改了那些部分,并且还得和自己的这份重新合并,这也是让我们在撰写论文的时候非常头疼的。
所以这时候需要有一个软件来自动管理每次文件的改动,这样就能结束手动管理多个版本,这个软件就是一个全新的版本管理系统。
版本控制最主要的功能就是追踪文件的变更。它将什么时候、什么人更改了文件的什么内容等信息忠实地了已录下来。每一次文件的改变,文件的版本号都将增加。除了记录版本变更外,版本控制的另一个重要功能是并行开发。软件开发往往是多人协同作业,版本控制可以有效地解决版本的同步以及不同开发者之间的开发通信问题,提高协同开发的效率。并行开发中最常见的不同版本软件的错误(Bug)修正问题也可以通过版本控制中分支与合并的方法有效地解决。
3.集中式和分布式的区别
1.集中式版本控制系统。
- 版本库集中存储在*服务器,每一位开发人员在开发的时候需要先从*服务器获取到最新版本,在开发结束后,把自己开发的部分推送给*服务器,因此脱离服务器开发者是无法工作的。
- 必须联网才能工作,而且对网络的依赖性较强,如果推送的文件过大而且网络较慢,则提交的速度会受到很大的限制。
- 文件存储格式是按原始文件存储,体积较大。
2.分布式版本控制系统。
分布式版本控制系统没有“*服务器”,每位开发人员的电脑都是一个完整的版本库,这样工作的时候就不需要联网,因为版本库就在自己的电脑上。分布式在没有网络的情况下也可以执行commit操作,在有网络的情况下执行push到远程分支仓库里。
4.git发展历史(引用廖雪峰官方网站的介绍)
很多人都知道,Linus在1991年创建了开源的Linux,从此,Linux系统不断发展,已经成为最大的服务器系统软件了。
Linus虽然创建了Linux,但Linux的壮大是靠全世界热心的志愿者参与的,这么多人在世界各地为Linux编写代码,那Linux的代码是如何管理的呢?
事实是,在2002年以前,世界各地的志愿者把源代码文件通过diff的方式发给Linus,然后由Linus本人通过手工方式合并代码!
你也许会想,为什么Linus不把Linux代码放到版本控制系统里呢?不是有CVS、SVN这些免费的版本控制系统吗?因为Linus坚定地反对CVS和SVN,这些集中式的版本控制系统不但速度慢,而且必须联网才能使用。有一些商用的版本控制系统,虽然比CVS、SVN好用,但那是付费的,和Linux的开源精神不符。
不过,到了2002年,Linux系统已经发展了十年了,代码库之大让Linus很难继续通过手工方式管理了,社区的弟兄们也对这种方式表达了强烈不满,于是Linus选择了一个商业的版本控制系统BitKeeper,BitKeeper的东家BitMover公司出于人道主义精神,授权Linux社区免费使用这个版本控制系统。
安定团结的大好局面在2005年就被打破了,原因是Linux社区牛人聚集,不免沾染了一些梁山好汉的江湖习气。开发Samba的Andrew试图**BitKeeper的协议(这么干的其实也不只他一个),被BitMover公司发现了(监控工作做得不错!),于是BitMover公司怒了,要收回Linux社区的免费使用权。
Linus可以向BitMover公司道个歉,保证以后严格管教弟兄们,嗯,这是不可能的。实际情况是这样的:
Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是Git!一个月之内,Linux系统的源码已经由Git管理了!牛是怎么定义的呢?大家可以体会一下。
Git迅速成为最流行的分布式版本控制系统,尤其是2008年,GitHub网站上线了,它为开源项目免费提供Git存储,无数开源项目开始迁移至GitHub,包括jQuery,PHP,Ruby等等。
历史就是这么偶然,如果不是当年BitMover公司威胁Linux社区,可能现在我们就没有免费而超级好用的Git了。