1一些基础概念
1.1SHA1

SHA1是密码学上的一种算法,git通过它来识别文件。在git中,通过对“对象”进行计算得来的SHA1,来得到对该文件项目的索引。其中SHA1值是一个40 个字符大小的“对象名”。所有对该文件的索引,都是通过该SHA值进行的。

实例:

  1. ~/ChenOS$ git log commit 4931e7216c6128fc86ee517f644e0cabc5be1cdc Author: Li Shuo Date: Sat Sep 1 08:44:26 2012 0800 在emacs下测试一下 commit 31ea7b0e2727c11250c45c0e4783a7c9bad79b42 Author: Li Shuo Date: Sat Sep 1 07:44:38 2012 0800 对freedos进行忽略,不提交到版本库 commit 5380879d00d6cc47b68b43387715f844362c1e09 Author: Li Shuo Date: Fri Aug 31 20:47:37 2012 0800 add freedos.img, modified bochsrc and make it into protectmode commit c1007d90ff564de39dd4c5a53231cadf941816df Author: Li Shuo Date: Fri Aug 31 20:03:46 2012 0800

其中的commit后面跟着的就是SHA值。

1.2bolb对象

bolb用来存储文件的内容,它是一块二进制数据。Blob对象不像Tree或者 commit对象一样,它没有指向任何东西或者其它属性。所以说,它本质上就是一个存放文件内容的仓库。

1.3tree对象

一个tree对象通常有多个指向blob对象或者其它tree对象的指针,这个指针其实就是一个SHA值。tree对象一般用来表示内容之间的目录和层次关系。

1.4commit对象

commit对象指向一个tree对象,并且它本身带有一些相关的描述信息。

2实例测试

2.1首先查看commit对象的SHA值

使用git last命令可以查看最近一次的提交,下面commit所跟的即是该次 commit的索引,我们可以利用该SHA值查看commit中的内容。

该命令的语法格式:

  1. git last

测试:

  1. ~$ cd ChenOS/ ~/ChenOS$ git last commit 4931e7216c6128fc86ee517f644e0cabc5be1cdc Author: Li Shuo Date: Sat Sep 1 08:44:26 2012 0800 在emacs下测试一下

2.2查看commit对象中的内容

从上一步中,我们找到了commit的SHA值,接下来可以使用该值查看commit的存储结构。

该命令的语法格式:

  1. git show -s --pretty=raw [commit-SHA]

测试:

~/ChenOS$ git show -s --pretty=raw 4931e7216ccommit 4931e7216c6128fc86ee517f644e0cabc5be1cdctree f5b7e53e20b4fc8aea3050863c8e69962850c4a6parent 31ea7b0e2727c11250c45c0e4783a7c9bad79b42author Li Shuo 1346460266 0800committer Li Shuo 1346460266 0800在emacs下测试一下

从命令的输出结果上看,在commit中,存储这该commit的索引,以及tree对象,父对象,作者和提交者的信息。在这里,我们需要的只是tree对象的索引。

2.3查看tree对象中内容

由上一步,我们找到了commit指向的tree对象,我们就查看tree对象里面存着什么。

语法格式:

  1. git ls-tree [tree-SHA]

测试:

  1. ~/ChenOS$ git ls-tree f5b7e53e20b
  2. 100644 blob e930018d222af541a6ec6ea93b7b09ae8af27141 .gitignore
  3. 100644 blob 83019b82b43bfdcff6cc3a0fb654a8c217644cb3 README
  4. 040000 tree 8034271b096fa202f664224651aade823918b4f3 V0.1

从输出可以很清楚的看到,tree对象里面包含着blob对象以及其它tree对象的索引。仔细看,其中那个tree对象索引是一个目录,跟上面两个的属性不一样。而在这里,我们需要的是blob对象,我们希望知道blob里面放着什么。

2.4查看bolb对象中内容

语法格式:

  1. git show [blob-SHA]

测试:

  1. ~/ChenOS$ git show e930018d222a
  2. V0.1/freedos.img
  3. *.img
  4. *.bin
  5. *.a
  6. *.o
  7. ~/ChenOS$ git show 83019b82b4
  8. This is my project of ChenOs.
  9. It's small , but all made by myself.

我们再用cat看看这两个文件的内容:

  1. ~/ChenOS$ cat .gitignore
  2. V0.1/freedos.img
  3. *.img
  4. *.bin
  5. *.a
  6. *.o
  7. ~/ChenOS$ cat README
  8. This is my project of ChenOs.
  9. It's small , but all made by myself.

看清楚了吧,两者实际上是一样的,也就是说blob对象存储着文件的内容。

3总结

到现在,我们可以说基本上搞明白了git存储过程。Git通过SHA值找到commit对象,在commit对象中存储着对tree对象的索引;接着通过该tree索引,找到tree对象, tree对象中存储着对blob对象和其它tree对象的索引;最后,通过索引找到blob 对象,而blob对象中则存储着实际的文件内容。整个过程完成。

转载于:https://blog.51cto.com/5938138/989015

Git 存储过程探究_无赖皮肤-ChinaUnix博客相关推荐

  1. 最小生成树的纠结_交流电之王-ChinaUnix博客

    假期里面系统地研究了一下最小生成树,下面就跟大家分享一下心得.最小生成树(Minimum Spanning Tree, MST)是图论的一个分支,主要用于从一个包含n个结点的连通图中提取出一个包含全部 ...

  2. ubuntu18.04在终端安装pip3时404 Not Found [IP: 91.189.91.24 80]_木绿的博客-CSDN博客

    ubuntu18.04在终端安装pip3时404 Not Found [IP: 91.189.91.24 80]_木绿的博客-CSDN博客 解决办法如下 亲测可用 sudo apt-get updat ...

  3. 手把手教你用Keras进行多标签分类(附代码)_数据派THU-CSDN博客 (翻译:程思衍校对:付宇帅)

    手把手教你用Keras进行多标签分类(附代码)_数据派THU-CSDN博客 手把手教你用Keras进行多标签分类(附代码)_数据派THU-CSDN博客

  4. shaderToy初学笔记(一)(​转载自最简单的ShaderToy入门 - 笑脸渲染_亨利王的博客-CSDN博客_shadertoy)

    void mainImage( out vec4 fragColor, in vec2 fragCoord ) {vec2 uv = fragCoord/iResolution.xy;uv-=.5;f ...

  5. 使用Windows live Writer 2012发布ChinaUnix博客

    最近打算把博客相应的文章发布到ChinaUnix上,找了很多的文章终于找到如何发表,记录如下. 有关windows live writer的安装可以参考,我另外一篇文章.<烂泥:用Windows ...

  6. 限制会话id服务端不共享_会话控制 - able-woman - 博客园

    会话控制是什么? cookie和session都是跟踪整个会话过程的技术手段.而会话,就是用户通过浏览器和服务器的一次通话. 为什么要有会话控制? 因为HTTP协议是无状态的,服务器不知道用户上一次做 ...

  7. html5登录界面源代码_最新版本尤娜博客已更新源代码(速拿!!!)

    大家好,我是尤娜博客(una-boot)的作者树下魅狐,自2019年9月una-boot-1.0.0版本开源以来,陆续有热爱技术,钟爱技术写作的小伙伴为尤娜提出了宝贵的改进意见和建议,在此表示衷心的感 ...

  8. 怎么把网页源码家入hexo博客_从零开始搭建个人博客(超详细)

    搭建一个个人博客需要什么呢? 唯一需要的就是耐心.坚持,你需要在遇到问题时自己去网上查找答案,有时候一个问题就要查半天,最后还有可能没解决,但是当问题解决时的满足感令人愉悦. 我是利用GitHub+H ...

  9. python博客下载本地文件_Linux CentOS6安装Git、Node.js及Hexo静态博客安装和使用方法...

    有些时候,我们有听到或者看到某个技术很希望自己也能尝试一下,即便我们没有项目需求,但接触过后以后还可以跟别人吹嘘这个技术我玩过,具体能否玩的精通都无所谓,至少我们可以体验到其中的乐趣.这不,这几天有接 ...

最新文章

  1. 一文详解实时稀疏点云分割
  2. mysql查询索引数组_mysql-索引
  3. java 分布式sql引擎_分布式SQL查询引擎 Presto 性能调优的五大技巧
  4. 寻找免费的阿里云云盾隐秘购买入口,申请并下载ssl证书(https证书)的详细步骤
  5. Python3调用MySQL数据库中的数据
  6. 蚁族之痛:过年如过关
  7. Python pip 国内镜像大全及使用办法
  8. zookeeper客户端练习(idea-Junit测试)
  9. 自动化无法定位的原因_Appium Android 自动化测试 -- 元素定位
  10. (转)利用Eclipse创建maven项目并生成META-INF和WEB-INF目录
  11. 《码农翻身》之浪潮之巅的Web
  12. JWT 的退出登录方法
  13. Greatest Parents Ligh OJ1128
  14. DC-DC电源芯片的选取和使用要点
  15. 存储器——嵌入式系统
  16. 成功解决:curl: (7) Failed connect to github-production-release-asset-2e65be.s3.amazonaws.com:443; 拒绝连接
  17. ios kb转m_超圣iOS下载
  18. Qt电子白板 画板 画笔 毛笔 钢笔 蜡笔 2D/3D图形 音视频播放
  19. 惠斯通电桥与运算放大器的输入失调电流和输入偏置电流
  20. 空心等腰三角形 (15 分)

热门文章

  1. Java 螺纹第三版 第三章数据同步 读书笔记
  2. python 字符串函数总结
  3. 用Delphi制作网络游戏外挂
  4. SQL 16进制数转化10进制
  5. ST-Link刷成J-Link
  6. CANOpen紧急报文
  7. mysql 储存引擎_详解mysql存储引擎的标准
  8. .metadata是什么项目文件_《深入微服务》之 如何给老婆解释什么是微服务的基础框架SpringBoot?
  9. 拿到大厂Offer了!
  10. 面试题:DUBBO源码使用了哪些设计模式