Image source: https://backlog.com/git-tutorial/git-workflow/
Here is a cool webapp to visualizing Git stuffs: http://git-school.github.io/visualizing-git/
Inside Git, everything is an object.
Everything in Git is represented in a few basic objects stored in the file system in the .git
directory.
Blob
Tree
Image source: https://git-scm.com/book/en/v2/Git-Internals-Git-Objects/
Commit
Image source: https://git-scm.com/book/en/v2/Git-Internals-Git-Objects/
Ref (aka tag, branch, etc.)
Image source: https://git-scm.com/book/en/v2/Git-Internals-Git-References/
Read more
A Git repository is essentially a giant directed acyclic graph (DAG).
Every object is stored on disk and has a SHA-1 hash as the filename.
But isn't SHA1 insecure?
Yes, but that does not matter in this context. Git uses SHA1 to keep track of data and check integrity. It is still a good hashing algorithm with a very-very low collision rate.
Git is very smart. It does not keep track of files, it keeps track of the content. If you create 1000000000000 files with the same content, it will only create 1 blob. Also works if you create 2 files with the same content. :wink: