git 基础及用法

一 git 简介

1 历史及由来

在 2002 年以前,世界各地的志愿者把源代码文件通过diff的方式发送给linus,然后由Linus本人通过手工方式合成代码。但其工作量过于大,因为代码的数量已经很多了,于是Linus选择了商用版的BitKeeper,BitKeeper的东家BitMover公司出于人道主义精神,授权Linux社区免费使用这个版本控制系统。
但大好局面在2005年就被打破了,原因是Linux社区牛人聚集,开发Samba的Andrew试图破解BitKeeper的协议(这么干的其实也不只他一个),被BitMover公司发现了(监控工作做得不错!),于是BitMover公司怒了,要收回Linux社区的免费使用权。

于是Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是Git!一个月之内,Linux系统的源码已经由Git管理了!
Git迅速成为最流行的分布式版本控制系统,尤其是2008年,GitHub网站上线了,它为开源项目免费提供Git存储,无数开源项目开始迁移至GitHub,包括jQuery,PHP,Ruby等等。

2 分布式和集中式

Linus 一直痛恨CVS和SVN 都是集中式的版本控制系统,而GIT 是分布式版本控制系统

1 集中式

集中式版本控制系统:版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆。
集中式版本控制系统最大的毛病就是必须联网才能工作,如果在局域网内还好,带宽够大,速度够快,可如果在互联网上,遇到网速慢的话,可能提交一个10M的文件就需要5分钟,这还不得把人给憋死啊。

2 分布式

分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。既然每个人电脑上都有一个完整的版本库,那多个人如何协作呢?比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。

和集中式版本控制系统相比,分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。而集中式版本控制系统的中央服务器要是出了问题,所有人都没法干活了。

3 两者比较

在实际使用分布式版本控制系统的时候,其实很少在两人之间的电脑上推送版本库的修改,因为可能你们俩不在一个局域网内,两台电脑互相访问不了,也可能今天你的同事病了,他的电脑压根没有开机。因此,分布式版本控制系统通常也有一台充当“中央服务器”的电脑,但这个服务器的作用仅仅是用来方便“交换”大家的修改,没有它大家也一样干活,只是交换修改不方便而已。

当然,Git的优势不单是不必联网这么简单,后面我们还会看到Git极其强大的分支管理,把SVN等远远抛在了后面。

CVS作为最早的开源而且免费的集中式版本控制系统,直到现在还有不少人在用。由于CVS自身设计的问题,会造成提交文件不完整,版本库莫名其妙损坏的情况。同样是开源而且免费的SVN修正了CVS的一些稳定性问题,是目前用得最多的集中式版本库控制系统。

除了免费的外,还有收费的集中式版本控制系统,比如IBM的ClearCase(以前是Rational公司的,被IBM收购了),特点是安装比Windows还大,运行比蜗牛还慢,能用ClearCase的一般是世界500强,他们有个共同的特点是财大气粗,或者人傻钱多。

微软自己也有一个集中式版本控制系统叫VSS,集成在Visual Studio中。由于其反人类的设计,连微软自己都不好意思用了。

分布式版本控制系统除了Git以及促使Git诞生的BitKeeper外,还有类似Git的Mercurial和Bazaar等。这些分布式版本控制系统各有特点,但最快、最简单也最流行的依然是Git!

3 工作区和暂存区

1 工作区
如git 文件夹就是一个工作区
2 版本库
工作区有一个隐藏目录.git,这不算工作区,而是git的版本库

git 的版本库中存放了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有git 为我们自动创建的第一个分支master,以及指向master 的一个指针叫HEAD
git 基础及用法
git add 实际是把文件添加到暂存区
git commanf是提交更改,将暂存区的内容提交到当前分支。

二 基本配置

1 建立版本库

git 基础及用法
git 基础及用法

2 编写文件,此文件一定要在git子目录下,git add 用命令告诉git,将文件添加到git仓库

git 基础及用法
git commit -m ** 及告诉git,将文件提交到仓库
git 基础及用法
git 基础及用法

3 git 的相关操作及现象

git 基础及用法
git 基础及用法
?? 表示还没提交到暂存区的数据
git 基础及用法
A 表示已经提交到暂存区,但没有提交到当前分支

git 基础及用法
右边M 表示在暂存区中修改了数据
git 基础及用法
左边M表示数据已经提交了但是修改了并且提交到了暂存区
git 基础及用法
git 基础及用法
git 基础及用法
数据操作日志的查看
git 基础及用法
git 基础及用法
git 基础及用法
数据定义版本并通过版本进行数据回滚。
git 基础及用法
git 基础及用法
数据的删除
git 基础及用法
git 基础及用法
git 基础及用法

git 基础及用法
git 基础及用法

三 git 与 github 之间的操作

1 本地数据上传

1 生成密钥
git 基础及用法
git 基础及用法
git 基础及用法
git 基础及用法
git 基础及用法
git 基础及用法
2 创建一个目录并将本地数据上传至此目录
git 基础及用法
git 基础及用法
git 基础及用法
git 基础及用法
git 基础及用法

2 在GitHub上创建目录并下载至本地

1 创建目录
git 基础及用法
git 基础及用法
git 基础及用法
2 下载至本地并查看
git 基础及用法

猜你喜欢

转载自blog.51cto.com/11233559/2152157