Characteristics
content addressed
distributed
reliable
simple
fast
Let's get started
porcelain commands
the shiny surface
meant for the end user
housekeeping included
usually used for command line
plumbing commands
get your hands dirty
meant for the craftsmen
where the real work is done
intended to be upward compatible
use it for scripts
Locations
working tree
index
repository
remote
working tree
trees and blobs on local filesystem
based on a branch or other commit
can be "clean" or "dirty"
index
staging area
objects stored, but not commited
manage what the next commit will do
repository
everything Git knows about your files
usually the ".git" subdir of the working tree
may be "bare", i.e. without a working tree
remote
other repository "somewhere" else
fetch / pull to get changes
push to spread changes
Back to work again
Core data types
objects
references
Object types
blobs
trees
commits
(annotated) tags
Reference types
heads (aka branches)
(simple) tags
HEAD, FETCH_HEAD etc.
Let's do another project
One more thing