赞
踩
cat HEAD
那我们如果将分支切换到master,再查看这个文件呢?
git checkout master
cat .git/HEAD
猜想正确,拉走,下一个
cat .git/config
就是一些配置信息存储在这
因此我们知道在heads中存储的是我们所有的分支
tags中是我们的标签,常见的标签用法是版本信息,更新到某一个比较大的点,如2.0,就可以加一个标签信息
那么,这个master文件里边存储的这么长一串是什么呢?其实是一个对象 地址
我们可以通过git cat-file -t ‘哈希地址信息’
git cat-file -t 'a9077'
# 只需要写入能够唯一识别的长度即可,如果已经有了a9077,就需要写更长点a90778
去查看这个对象的类型
可以看到此处存储的是一个commit类型的对象,想看到对象中更进一步的内容
git cat-file -p 'a9077'
可以看到显示出了提交者、作者、父类分支、树
关于树,我们下文中再讲
我们打开最后一个f6文件夹
这又是什么呢?git里边查看文件类型,是git cat-file -t,查看文件内容是git cat-file -p
此处object的存储方式是需要前边拼上文件夹名称f6的,因此我们查看一下类型和内容
我们能看出来这个对象是一个tree类型。
文件内容是我们提交过的a.txt,b.txt和c.txt (这三个文件内容都是空白)
需要注意的是:a.txt,b.txt,c.txt这三个都是blob类型,而且hash地址是一样的。
因为:git中针对内容相同的文件,使用的是同一个blob文件,只是存储的引用不同
阿里云博客传送门:.git文件夹探秘,理解git运作机制
● 每一次commit相当于创建了一个commit对象,commit对象中包含一个tree对象、父亲分支信息、作者信息、提交者信息
● tree对象内部包含其他的tree对象和一些blob对象信息。
commit操作相当于给仓库拍了一个快照,存储的是当前整个的已提交的文件区域的信息。
我们假设,进行了过这样的操作
一句话概括:
commit包含tree对象和blob对象、tree对象包含blob对象;
文件是一个blob对象,tree对象包含若干文件,相同文件内容只会存入一个blob,commit对象中包含若干个tree和blob
新建一个git仓库,有且仅有一次commit,仅仅包含/doc/readme,请问内含多少个tree?多少个blob?多少个object?
因此,这次有四个对象被创建,其中有一个commit对象,两个tree对象(文件夹会被视为一个tree对象),这个文件夹对象tree包含在总的tree中,一起放入了commit对象中
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。