Git对象

作者: 正在加载更多 | 来源:发表于2018-10-21 14:16 被阅读0次
Git对象库

git log -1 --pretty=raw
结果:

commit 2443ae29d86ec5edd6fbb70e2a01f1902dd02a37
tree 5313f2996a91501b2e79e4a93476132904e4082e
parent eef995dc79c6e5717942a19494a2ad3e02fbf8a5
author 17305 <guoxi.zhang@hand-china.com> 1540029427 +0800
committer 17305 <guoxi.zhang@hand-china.com> 1540029427 +0800

     which version checked in

包含了三个SHA1哈希值表示的对象ID:
commit 2443ae29d86ec5edd6fbb70e2a01f1902dd02a37 表示本次提交的唯一标识
tree 5313f2996a91501b2e79e4a93476132904e4082e 表示本次提交对应的目录树
parent eef995dc79c6e5717942a19494a2ad3e02fbf8a5表示本地提交的父提交(上一次提交)

研究Git对象一个重要的命令是git cat-file
git cat-file -t <commit>查看对象的类型
例如

  • git cat-file -t 2443ae--------------------------------->commit
  • git cat-file -t 5313f2---------------------------------->tree
  • git cat-file -t eef995---------------------------------->commit

git cat-file -p <commit>查看对象的内容
例如

  • git cat-file -p 2443ae
    结果
tree 5313f2996a91501b2e79e4a93476132904e4082e
parent eef995dc79c6e5717942a19494a2ad3e02fbf8a5
author 17305 <guoxi.zhang@hand-china.com> 1540029427 +0800
committer 17305 <guoxi.zhang@hand-china.com> 1540029427 +0800
  • git cat-file -p 5313f2
    结果
    100644 blob dd6d6d6c4c00533b841fcbc2efc8e8ec98a855e8 welcome.txt

  • git cat-file -p eef995
    结果

tree a114e050ce01e14905be557fc3ffc12991984e3e
parent 29fb68ec0cf0ff5c50e1bb4fa209468daf121b81
author 17305 <guoxi.zhang@hand-china.com> 1539960515 +0800
committer 17305 <guoxi.zhang@hand-china.com> 1539960515 +0800

配置文件中没有name的提交
  • git cat-file -p dd6d6d
    结果
hello
nice to meet you

这些对象保存在Git库的objects目录下(ID的前2位作为目录名,后38位作为文件名)使用如下命令能看到这些对象在对象库中的位置

for id in 2443ae 5313f2 eef995 dd6d6d;
    do 
        ls .git/objects/${id:0:2}/${id:2}*; 
    done

结果:

.git/objects/24/43ae29d86ec5edd6fbb70e2a01f1902dd02a37
.git/objects/53/13f2996a91501b2e79e4a93476132904e4082e
.git/objects/ee/f995dc79c6e5717942a19494a2ad3e02fbf8a5
.git/objects/dd/6d6d6c4c00533b841fcbc2efc8e8ec98a855e8

下图清晰地展示了Git对象库中各个对象的关系


对象之间的关系.png

下面是一个更接近于真实的版本库的结构图


Git版本库结构图

Git提供了很多方法可以方便的访问Git库中的对象

  • 采用部分的SHA1哈希值。不必把40位写全,只采用开头的部分(4位及以上),只有不与现有哈希值冲突即可
  • 使用HEAD代表版本库中最近的一次提交
  • 符号^可以指代父提交。
    HEAD^代表版本库中的上一次提交,即最近一次提交
    的父提交
    HEAD^^ 则代表HEAD^的父提交
  • 对于一个提交有多个父提交,可以在符号^后面用数字表示是第几个父提交.
  • 符号~<n>也可以用于指代祖先提交。例如
    3534e4~5即相当于3534e4^^^^^
  • 提交所对应的树对象。例如
    3534e4^{tree}
  • 某一次提交所对应的文件对象
    3534e4:path/to/file
  • 暂存区中的文件对象。
    :/path/to/file

相关文章

  • show 与 git 对象

    git 对象 Git 主要有四种对象:tag 对象,Commit 对象, tree 对象以及 blob 对象。 可...

  • **git** 使用笔记

    git 使用笔记 git原理: 文件(blob)对象,树(tree)对象,提交(commit)对象 tree对象 ...

  • 2019-10-25

    git 使用笔记 git原理: 文件(blob)对象,树(tree)对象,提交(commit)对象 tree对象 ...

  • Git学习笔记(一)—— Git对象模型

    Git对象 在Git系统中有四种类型的对象,几乎所有Git操作都是在这四种Git对象上进行的,所以了解这四种对象的...

  • Git 对象模型

    Git 对象类型 Git 对象有如下四种: blob tree commit tag blob 对象 blob 只...

  • Git Objects

    Git 如何存储对象 通过 Ruby 脚本语言存储一个 git blob 对象 参考: https://git-s...

  • git学习

    基本概念: Git对象: 查看对象类型 git log --pretty=raw --graph e672332 ...

  • Git对象

    Git对象库 git log -1 --pretty=raw结果: 包含了三个SHA1哈希值表示的对象ID:com...

  • Git 对象

    Git的commit对象 不同于SVN以顺序数字的方式表示提交,Git采用40位的SHA1哈希值来表示提交,但是在...

  • 【学了就忘】Git分支 — 41.Git分支相关理论

    1、Git对象之间的关系 我们之前学了Git的三个对象:提交对象、树对象、数据对象。 我们假设现在有一个工作目录,...

网友评论

      本文标题:Git对象

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