Sui

Git入门-Git介绍

字数统计: 1.4k阅读时长: 4 min
2021/01/18 Share

Git 入门-Git 介绍

以下文章中的图片大部分借鉴于 https://git-scm.com/book/zh/v2

Git诞生在Linux之父的手中,起初的目的是用来管理Linux内核源码。

Linux的源码当时是托管在一个叫做BitKeeper的平台上的,但是由于两公司的利益关系,Linux与BitKeeper在2005年终止了合作,这样以来Linux源代码就无处安放了,但是我们的Linux之父怎么能忍受这种技术上的”屈辱”呢,Linux之父一生气就自己动手制造出来了Git工具。

Git 起步

上文中介绍了关于版本控制的概念,以及略微的说了一点关于Git的基础知识,下面我们就再来深入的了解一下Git,认识一下Git的伟大之处。

在RCS(本地版本管理系统)中,我们知道了他管理版本是通过存储基文件(即源文件),然后通过存储各个版本与基文件的差异(差异主要为内容上的差异,存储的也是有差异的内容,而不是哪个文件有差异就存储哪个文件)来做到版本管理的,当切换到某一个版本时,只需要将此版本的差异与基文件做运算来得到当前的版本,并不是每个版本都存储所有文件(如果真的是这样,那和直接手动拷贝文件做版本管理也没什么差别了)

而在Git中,并不是通过存储各个版本之间的差异来解决版本管理这个伤脑筋的问题,Git是直接通过存储文件来做到版本管理的(并不是存储了所有的文件,而是修改了哪个文件就存储哪个文件),没有被修改的文件会创建一个链接,指向源文件(相当于对当时的文件做了一个快照),给人的感觉就相当于存储了所有文件。

至于Git这样做有什么样的好处,采用这种方式进行版本管理,当我们想要恢复到某一个版本的时候,直接将当前版本存储的文件取出即可,对于没有修改过的文件,则可以通过链接找到源文件。对比于RCS,还需要将差异文件与基文件的内容进行合并,相当于在Git的基础上增加了一步。(下面这张图是Git对文件的快照图)

Git

由于在本地存储的是远程Git仓库的所有信息,因此我们的一切操作都可以在本地进行,就像在SVN中那样,当可以连接到网络时,就能把本地仓库及时的更新到远端仓库上,方便其他人的协同开发。另外,git在每次存储文件前都会对当前的存储计算Hash(sha-1)值,此Hash值是40位的十六进制字符串组成的,一旦文件在git不知情的情况下改变了,那么git在上传文件的时候就会报错,阻止上传。

文件的几种状态

在Git中,文件有三种状态,每种状态在git中都有不同的空间与其对应,git就是通过移动文件到各个空间来管理并且跟踪文件的

当修改了文件或者添加了文件,此时这些文件处在工作区,也就是现在还没有被纳入版本库,只是在本地磁盘上存储,需要使用git add命令将他们纳入到暂存区,暂存区里保存了还没提交到本地版本库的文件,使用git commit进行提交,就会将这些文件加入到本地仓库,想要加入到远端仓库,就需要使用git push命令

这里再对3个文件区进行一个总结:

  • 工作区:就是一个文件系统,如果修改了文件或添加了文件,此时的文件还没有跟版本仓库挂上联系,需要git add 命令将他们加入到暂存区
  • 暂存区:一个中转的区域,从工作区提交过来的内容就加入到此处,此处也还没将文件加入到版本仓库,需要使用git commit加入到仓库中
  • 版本库:这里的版本库指的是本地版本库,从暂存区提交过来的文件会被放入到版本库中,此时文件都已经在仓库中有记录了,可以进行版本管理了

对这三个区域进行一下比喻,例如农民卖粮食,农民需要用卡车将粮食送到粮库中,此时农民手中的粮食就是工作区的内容,想要送到粮库中,第一步就需要使用git add即把粮食装入到卡车(卡车就是暂存区),卡车将粮食运送到粮库,并把粮食卸载到粮库的仓库中,需要使用git commit(卸载到粮库的仓库中),此时的所有粮食只是在本地的粮库(本地版本仓库)中,这些收购的粮食需要同步给国家粮食局,即使用git push命令推送。

不知比喻是否贴切,但是大概意思是描述清楚了。

CATALOG
  1. 1. Git 入门-Git 介绍
    1. 1.1. Git 起步
    2. 1.2. 文件的几种状态