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
          
        
        
          
             
            
          
          
             
            
          
        
        
          
             
            
          
          
             
            
          
        
        
          
             
            
          
          
            