美文网首页
git学习日志-git剖析

git学习日志-git剖析

作者: Levi_moon | 来源:发表于2020-05-29 18:17 被阅读0次

虽然git用起来和其他的版本控制系统类似,但是它在对数据的存储和基本工作原理上与其他版本控制系统有很大的差异。

理解这些差异可以帮助我们更好的理解与使用git,可以避免很多在使用时的困惑。

为了更好的理解git,就需要对git的特点有所了解,那么接下来就对git的特点进行剖析。

1.git特点剖析

git的特点大致总结起来的话,有以下几点:

  • 记录快照,而不是存储差异数据
  • 操作本地化,没有网络延时困扰
  • 检验文件的完整性,杜绝文件内容或目录内容被篡改
  • 一般只添加数据,数据丢失可能性小
git特点剖析.png

(1)记录快照,而不是存储差异数据

大部分版本控制系统是以文件变更列表的方式存储信息,它们存储的信息由一组原文件和每个文件随时间逐步累积的差异组成。

version_1 version_2 version_3 version_4 version_5 ...
文件A 差异1 差异2 差异3 ...
文件B 差异1 差异2 ...
文件C 差异1 差异2 ...
文件D 差异1 差异2 差异3 差异4 ...
文件E 差异1 ...

因此,此类版本控制系统也被称为基于差异的版本控制系统。

而git不是采用上述的方式保存数据,相反,git会把数据看作是对小型文件系统的一系列快照。

version_1 version_2 version_3 version_4 version_5 ...
文件A A1 A2 A2 A3 ...
文件B B B1 B1 B1 ...
文件C C1 C1 C1 C2 ...
文件D D D D D1 ...
文件E E E E E E

在git中,每当开发者保存或提交修改时,git都会为当前的全部文件创建一个快照,并保存这个快照的索引。如果文件没有修改,那么git不会重新存储该文件,而是只保留一个链接指向之前存储的文件。

换句话说,git对待数据更像是对待一个快照流。

(2)操作本地化,没有网络延时困扰

由于git在本地有仓库,因此git的操作都是对本地文件的操作,一般不需要连接网络,获取其它计算机的信息。因此,这会让git看起来比其它版本管理系统操作更迅速。

(3)检验文件的完整性,杜绝文件内容或目录内容被篡改

git中所有的数据在存储前都会计算校验和,这是构建在git底层的,是构成git的重要一环。

git通过SHA-1散列机制,对文件内容或目录结构计算出由40个十六进制字符组成的字符串,这些字符串充当文件或目录的索引存储在git数据库中。

(4)一般只添加数据,数据丢失可能性小

我们执行的git操作,基本上都是往git数据库中添加数据。如果我们还定期往其他仓库推送数据,那么就很难丢失数据。


2.git的三种状态及三个阶段

在git中,有三种状态经常被提及,那就是:已提交(committed)、已修改(modified)、已暂存(staged)

  • 已修改,已经修改了文件内容,但是还没保存到本地仓库中;
  • 已暂存,对一个已修改的文件的当前版本做了标记,将之包含在下次提交的快照中;
  • 已提交,数据已经保存在本地仓库中了。

此刻,对于git的三种状态,我们或许理解的还不够透彻,不过不要紧,随着我们对git的深入剖析,等下我们就会清楚的知道这三个状态的真实含义是什么。

由git的三种状态会引出git的三个阶段,那就是:工作区(working directory)、暂存区(staging area)、git仓库(.git directory或Repository)

  • 工作区,在磁盘上供开发者使用、修改;
  • 暂存区,是一个文件,保存下次将要提交的文件列表信息;
  • git仓库,用来保存项目的元数据和对象数据库。

git的三个阶段我们现在清楚了,那么这三个阶段之间的工作流程就组成了git的工作原理。

git三个阶段.png
  1. 在工作区修改文件;
  2. 将打算下次提交的更改选择性的添加到暂存区;
  3. 提交更新,找到暂存区的文件,将快照永久性存储到git仓库中。
git的三个状态及三个阶段.png

了解了git的工作原理,那么也就清楚git的三个状态是什么了。

  • 如果git仓库中保存了特定版本的文,那么就属于已提交状态;
  • 如果文件已经修改并放入暂存区,就属于已暂存状态;
  • 如果文件被修改了,而且还没放到暂存区,就是已修改状态。

相关文章

  • git学习日志-git剖析

    虽然git用起来和其他的版本控制系统类似,但是它在对数据的存储和基本工作原理上与其他版本控制系统有很大的差异。 理...

  • git的一些常用命令

    $ git status 查看状态$ git log查看日志$ git reflog 查看操作日志$ git c...

  • GIT实战

    git实战 git与svn的区别 git核心命令使用 git底层实现原理剖析 基于git通信协议搭建git私服 基...

  • git 常用命令

    获得版本库 git init git clone​ 查看信息 git help Git log​ 查看提交日志 g...

  • git 命令行使用

    一 git常用命令 git branch //查看本地所有分支 git log //查看提交日志 git fe...

  • 常用命令

    1、git status 查看工作区和暂存区的状态 2、 日志:git log 和 git reflog git ...

  • git学习日志-git config

    配置文件 git自带一个git config工具来帮助我们设置git的外观和行为的配置变量。这些变量存储在三个不同...

  • git学习日志-git仓库

    获取git仓库 在开始使用git之前,必须先有个git仓库才行。通过两种方式可以获取git仓库: 从其他服务器克隆...

  • 历史

    查看提交日志:git log单行历史:git log --pretty=oneline

  • 2019-07-22

    git日志迁移 git fast-export HEAD -- /Users/apple/TestGitRoot/...

网友评论

      本文标题:git学习日志-git剖析

      本文链接:https://www.haomeiwen.com/subject/deffzhtx.html