1. commit/tree/blob
blob
- 在执行
git update-index filename
或git add filename
后生成,即加入暂存区时生成。 - 是一个字节码文件,保存的是
一个特定的文件头+加入暂存区的文件的内容
。
tree
- 在执行commit时生成。
- 根据index文件生成。保存的是暂存区的目录信息。
- 若暂存区有多个文件夹或子文件夹,会为每个文件夹生成一个tree对象。
commit
- 在执行完commit后生成。
- 保存的是tree对象(tree)、当前分支的前一个commit对象(parent)、文件作者信息(author)、提交者信息(committer)。
2. tag
tag:
为commit/tree/blob对象打标签,作用与对象的哈希值类似,可视作一个索引,相对于哈希值来说更方便开发人员记忆、识别、操作不同的对象,更加符合人的使用习惯。。
3. commit/tree/blob/tag共同点
- 都放在objects目录下。
- 都是将哈希值的前2个字符作文一个文件夹名,然后将哈希值中剩余的38个字符作为一个文件名存放相应对象的信息。并且新建的文件就放在新建的文件夹下。
例如