Git_study

0x00 Git的诞生

事情是这样的,在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管理了!牛是怎么定义的呢?大家可以体会一下。

0x01 Centos7安装&使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ yum install git
#配置基本信息
$ git config --global user.name "icefeng199"
$ git config --global user.email "admin@icefeng.cc"
$ git config --list
#创建版本库 又名仓库 英文名叫:repository
$ git init #目录变repository,当前目录多了一个.git 要ls -a
#文件添加到版本库
#PS:所有的版本控制系统 只能追踪文本文件的具体变化 二进制文件只能追踪大小,无法追踪具体变化
$ git add fisrt.txt
$ git commit -m "wrote a fisrt get file"
#修改fisrt.txt文件
$ git status #查看当前仓库的状态
$ git diff #查看当前修改了什么内容
$ git log #显示最近到最远提交的日志 --pretty=oneline

0x02.Git的文件夹分析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
├── HEAD   #映射到ref引用,能够找到下一次commit的前一次哈希值
├── config # 存放git的一些信息
├── description #仓库的描述信息,主要给gitweb等git托管系统使用
├── hooks #Shell脚本
├── index #暂存区(stage),是一个二进制文件
├── info #git仓库的一些信息
│ └── exclude
├── objects # 存放所有git对象的地方
│ ├── 0c
│ │ └── 14454dd8d472ef27843ac8c86bdba161c27a03
│ ├── info
│ └── pack
└── refs
├── heads #所有本地分支文件
└── tags #文件夹是使用git stash命令时,会将生成的git对象的哈希值存储到stash文件里

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!