首页 > 代码库 > 理解git

理解git

为了真正了解git,我们从底部、底层开始,了解git核心,知其然并知其所以然。

 

为什么要进行版本控制呢? 因为编写文件不可能一次到位,文件总是有不同的状态需要保存下来,方便以后出错回滚。

git 是目前最先进的版本控制软件(VCS,version control system),它是linux之父Linus Torvalds的第二个作品。

正如git所命名的那样,是“愚蠢或不开心的人”,Linus评价“git is a British English slang for a stupid or unpleasant person.”

而且他认为git是一个简化的文件系统,版本控制只是它的一个功能,并不是全部。“In mang ways you can just see git as a filesystem-it’s content –addressable,and it has a notion of versioning ,but I really designed it coming at the problem from the viewpoint of a filesystem person(hey,kernels is what I do),and I actually have absolutely zero interest in creating a traditional SCM system.”

VCS的主要发展进程: CVS(Concurrent Version System)---SVN(subversion)--git

“Git is at it’s heart very stupid simple.”底层简单,但抓住了本质,功能强大

一个简化的文件系统,文件只保存一份,传统的是两份

/c/user:可以看到省去了冒号

pwd:在Linux层次结构中,想要知道当前所处的目录,可以用pwd命令,该命令显示整个路径名。

git –version 显示版本,说明已经安装好

inux中 ls-ltr:对输出文件进行各种排序;

按照字符序(default): #ls -l

按照修改时间排序: #ls -t //最近修改在最上面

逆排序 : #ls –r

ls 命令将每个由 Directory 参数指定的目录或者每个由 File 参数指定的名称写到标准输出,以及您所要求的和标志一起的其它信息。如果不指定 File 或 Directory 参数, ls 命令显示当前目录的内容。

传统的CVS,SVN的储存如下图所示:

若想取得版本四的所有文件:

A+点他1+点他2

B+点他1

C+点他1+点他2

节省了磁盘空间,加大了计算量,性能下降

snapshot

n.      (快照) 照片,独立的印象,简单印象; 简介; 急射,速射;

vt.    给…拍快照;

vt.    拍快照;

A1,A2等都是独立的文件

恰恰相反,这种方式是高效的,为了节省磁盘空间,用zip压缩

Version3,A1不变,保存个指针指向A1,牺牲磁盘上的开销,提高了性能

Metadata:元数据  包括三个方面:内容(字节序列),文件名name,大小size,(访问权限等)

创建文件非常简单 ,复制后改变文件名,在磁盘上存的是两个文件,这显然不是一种很好的存储方式。可不可以一个文件取两个名字?提到这是为了以后说明git和文件系统的区别。

技术分享 

技术分享

File version 文件版本:对文件后进行修改,变成第二个状态,第二个文件版本。希望两种状态都保存下来,方便回溯。如果没有的话,总是需要clone,很麻烦。

同一个文件,多种状态,如何保存?

多种状态,有很多内容重复。保存f1,保存f2与f1的区别、(差、变化)(svn),类似f3与f2的差

F1,f2都保存下来(git,很傻、拙劣的一种方式,但有它背景,磁盘越来越便宜,带来了很多优点,在实践中是一种很优秀的方法)

Hash:哈希 输入是一个文件,经过一个函数变化,产生一个固定长度的字节fixed length

主要流行的两种:MD5,渐渐淘汰,一个(山东,清华女)教授破解了它;SHA1,20个byte,160个bit,理解为文件的指纹。文件变化,指纹也发生了的变化。单向的,难以从字节反推出文件

创建一个git.txt

sha1  git.txt  会得到20个字节

改动git

Sha1 git.txt  20个字节改变

 

 

(1)安装

git安装之类的十分简单,具体过程我们不再赘述,直接进行应用。 

查看git版本,验证git已经成功安装:

技术分享

 (2)git初始化

在d:/temp/gitdemo/aaa下创建一个文件main.c,并将目录aaa作为git仓库:

(可以用mkdir先将目录建立出来)

技术分享 

在main.c中编辑内容 

技术分享

技术分享

技术分享 

技术分享

所有 git 需要的数据和资源都存放在.git目录中 

技术分享

(3)配置用户名和密码 

技术分享

技术分享

每次git提交都会使用该信息,因为传递了 --global 选项,所以git将总是会使用该信息来处理你在系统中所做的一切操作。如果你希望在一个特定的项目中使用不同的名称或e-mail地址,你可以在该项目中运行该命令而不要--global选项。 

Git有三种配置

在.git目录下有config文件,

 

理解git