Git对象

2018-10-21  本文已影响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 -p <commit>查看对象的内容
例如

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

配置文件中没有name的提交
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库中的对象

上一篇 下一篇

猜你喜欢

热点阅读