Introduction to Git
Table of Contents
Git Internals and SHA
Some Git Terms
- Untracked files: New files that Git has not tracked.
- Working area: Modified files/changes that are un-committed.
- Staging area: Modified files/changes that are marked to go into the next commit.
- Local repo: Local copy of the repository
- Remote repo: Hosted repository on GitHub, GitLab, etc.
Basic Git Workflow
Figure 1: Git Workflow
Image source: https://backlog.com/git-tutorial/git-workflow/
Git Basics
Here is a cool webapp to visualizing Git stuffs: http://git-school.github.io/visualizing-git/
A very good guide to Git basics
Command Reference
How does Git work?
Inside Git, everything is an object.
Git objects
Everything in Git is represented in a few basic objects stored in the
file system in the .git
directory.
- Blob
- Data (code, pictures, etc.)
- Tree
- Pointers to files, content and other trees
Figure 2: Git Tree
Image source: https://git-scm.com/book/en/v2/Git-Internals-Git-Objects
- Commit
- Author
- Message
- Pointer to a tree
- Pointer to parent
Figure 3: Git Commit
Image source: https://git-scm.com/book/en/v2/Git-Internals-Git-Objects
- Ref (aka tag, branch, etc.)
- Pointer to a commit
Figure 4: Git References
Image source: https://git-scm.com/book/en/v2/Git-Internals-Git-References
- Read more
Git and Graphs
A Git repository is essentially a giant directed acyclic graph (DAG).
SHA1
Every object is stored on disk and has a SHA-1 hash as the filename.
Content is King
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: