Git data model
Essentially, Git is a content-addressable filesystem, Linus's one page explanation, correction: the SHA1 hash is NOT the hash of the compressed object.
Git from the Bottom Up by John Wiegley, discuss.
blobis content of file
$ git cat-file -p 74576250e3c3a901bf06832bd0e4ee5e00422115
# Shuo's notes
http://chenshuo.github.io/notes
treehas one or moretree/blob, it's Merkle tree.blobare leaf nodestreeare internal nodes
$ git cat-file -p 5d42664e3d812288b47795718d0e4faf26397bf9
100644 blob cde88fe0e10f265ed3cb2af0ea5422f607c1a37c .gitignore
100644 blob 74576250e3c3a901bf06832bd0e4ee5e00422115 README.md
040000 tree eabff4ee0b30f5d6a644ce508ba7fe47dc563aa4 docs
100644 blob 020682e2399c75cf3ad9636964c7501f27a0e893 mkdocs.yml
commit:- has one
tree - has one or more parent
commit(s)
- has one
$ git cat-file -p 3f08891b366c750d4739241874cfb1dbef56c398
tree 5d42664e3d812288b47795718d0e4faf26397bf9
parent 955f683cae5d2514d1c788fce9206451e2ac3334
author Shuo Chen <chenshuo@chenshuo.com> 1484903215 -0800
committer Shuo Chen <chenshuo@chenshuo.com> 1484903215 -0800
update ssl.md
-
tag??? -
Exceptions:
- initial
commithas no parent - empty file is empty
blob - empty directory is empty
tree
- initial