git服务器的搭建及使用(第一章)
一、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了。
(以上摘自雪峰老师官网)
Git制定初期目标:
- 速度
- 简单的设计
- 对非线性开发模式的强力支持(允许上千个并行开发的分支)
- 完全分布式
- 有能力高效管理类似Linux内核一样的超大规模项目(速度和数据量)
二、集中式版本控制和分布式版本控制的区别
版本控制(VCS)是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。
1.为了让不同系统上的开发者协同工作,集中化版本控制系统(CVCS)应运而生,如CVS,SVN及Perforce等。CVCS都有一个单一的集中管理服务器,保存所有文件的修订版本,协同工作的人员通过客户端连接到中央服务器,取出最新的文件或者提交更新。管理员通过权限的控制,掌控每位工作人员对文件的操作。
但是,单一的中央服务器有很大的隐患。服务器的宕机造成在此时间段内,文件无法提交及更新,无法协调工作;服务器磁盘发生故障,如果没有备份,会造成数据丢失,严重的丢失整个项目的历史更新记录。虽然可以使用某一看客户端的文件作为恢复数据的基础,但仍不能保证该文件数据的完整性。
2.为了降低CVCS带来的弊端,分布式版本控制系统(DVCS)面世,如Git,Mercurial,Bazaar及Darcs等。DVCS将文件仓库完整的clone下来,保证每个客户端的文件都是最新的且每个客户端都是一个独立的仓库,DVCS有一个名义上的中央服务器,它最大的作用是作为各客户端文件的交换地,更便于各客户端之间文件的交换及更新,如果没有此中央服务器,各客户端文件的交换太繁琐,但并不像CVCS那般属于真正意义上的中央服务器。
三、git的安装
Git的工作需要调用curl、zlib、openssl、expat、libiconv等库的代码,所以需要事先安装这些依赖工具。
查看系统git版本,并移除:
$ git --version
git version x.x.x.x
yum remove git ##移除原来的版本
1.使用系统预编译好的安装包
1).Debian/Ubuntu
安装命令:
$ apt-get install libcur14-gnutls-dev libexpat1-dev gettext \
libz-dev libssl-dev
$ apt-get install git-core
查看git安装的版本
$ git --version
git version x.x.x.x(版本号)
2).Centos/RedHat
$ yum install curl-devel expat-devel gettext-devel \
openssl-devel zlib-devel
$ yum -y install git-core
查看git安装的版本
$ git --version
git version 2.18.0-rc2
2.从git源码安装
从源码安装可以保证安装到最新版本,或者是自己想用的版本,不必局限于系统。
安装依赖工具:如上 1). 和 2).
从Git官方站点下载最新版本的源码:http://git-scm.com/download
编译安装:
$ tar -zxf git-x.x.x.x.tar.gz
$ cd git-x.x.x.x
$ make perfix=/usr/local all
$ sudo make prefix=/usr/local install
------------------------------------------------------------------------------------------------------------>
git命令加入环境变量
echo "export PATH=$path:/usr/git/bin" >> /etc/profile
source /etc/profile
四、运行Git前的配置
使用git-config命令,对git做出一些设置。
git config --system 读写/etc/gitconfig文件:对系统中所有用户都普遍适用的配置。
git config --global 读写~/.gitconfig文件:针对于用户目录下的配置文件。
当前项目的配置.git/config文件,仅仅对当前项目有效。每一个级别的配置都会覆盖上层的配置。
1.用户信息
配置个人的用户名和电子邮箱,每次git提交时都会引用这两条信息,说明是谁提交,纳入历史记录。
$ git config --global user.name "XXX"
$ git config --global user.email xxx@xxx.com
2.文本编辑器
除了系统默认的编辑器,还可按自身偏好,设置git的文本编辑器
$ git config --global core.editor emacs
3.差异分析工具
解决冲突时使用的差异分析工具的设置。
$ git config --global merge.tool vimdiff
(kdiff3,tkdiff,meld,xxdiff,emerge,vimdiff,gvimdiff,ecmerge,opendiff,还支持自己开发的工具)
------------------------------------------------------------------------------------------------------------>
查看配置信息
$ git config --list
针对重复的变量名,说明改配置来自不同的配置文件,系统的或用户的或本项目的,这种情况,Git采用的是最后一个配置,即以上提到的每一个级别的配置都会覆盖上层的配置。
还可以查阅特定的变量值:
$ git config user.name
(未完待续)