- 
  
1. Per Iniziare
- 1.1 Il Controllo di Versione
 - 1.2 Una Breve Storia di Git
 - 1.3 Cos’é Git?
 - 1.4 La riga di comando
 - 1.5 Installing Git
 - 1.6 First-Time Git Setup
 - 1.7 Chiedere aiuto
 - 1.8 Sommario
 
 - 
  
2. Git Basics
- 2.1 Getting a Git Repository
 - 2.2 Recording Changes to the Repository
 - 2.3 Viewing the Commit History
 - 2.4 Undoing Things
 - 2.5 Working with Remotes
 - 2.6 Tagging
 - 2.7 Git Aliases
 - 2.8 Sommario
 
 - 
  
3. Git Branching
- 3.1 Branches in a Nutshell
 - 3.2 Basic Branching and Merging
 - 3.3 Branch Management
 - 3.4 Branching Workflows
 - 3.5 Remote Branches
 - 3.6 Rebasing
 - 3.7 Summary
 
 - 
  
4. Git on the Server
- 4.1 The Protocols
 - 4.2 Getting Git on a Server
 - 4.3 Generating Your SSH Public Key
 - 4.4 Setting Up the Server
 - 4.5 Git Daemon
 - 4.6 Smart HTTP
 - 4.7 GitWeb
 - 4.8 GitLab
 - 4.9 Third Party Hosted Options
 - 4.10 Summary
 
 - 
  
5. Distributed Git
- 5.1 Distributed Workflows
 - 5.2 Contributing to a Project
 - 5.3 Maintaining a Project
 - 5.4 Summary
 
 
- 
  
6. GitHub
 - 
  
7. Git Tools
- 7.1 Revision Selection
 - 7.2 Interactive Staging
 - 7.3 Stashing and Cleaning
 - 7.4 Signing Your Work
 - 7.5 Searching
 - 7.6 Rewriting History
 - 7.7 Reset Demystified
 - 7.8 Advanced Merging
 - 7.9 Rerere
 - 7.10 Debugging with Git
 - 7.11 Submodules
 - 7.12 Bundling
 - 7.13 Replace
 - 7.14 Credential Storage
 - 7.15 Summary
 
 - 
  
8. Customizing Git
- 8.1 Git Configuration
 - 8.2 Git Attributes
 - 8.3 Git Hooks
 - 8.4 An Example Git-Enforced Policy
 - 8.5 Summary
 
 - 
  
9. Git and Other Systems
- 9.1 Git as a Client
 - 9.2 Migrating to Git
 - 9.3 Summary
 
 - 
  
10. Git Internals
- 10.1 Plumbing and Porcelain
 - 10.2 Git Objects
 - 10.3 Git References
 - 10.4 Packfiles
 - 10.5 The Refspec
 - 10.6 Transfer Protocols
 - 10.7 Maintenance and Data Recovery
 - 10.8 Environment Variables
 - 10.9 Summary
 
 
- 
  
A1. Appendice A: Git in altri contesti
- A1.1 Graphical Interfaces
 - A1.2 Git in Visual Studio
 - A1.3 Git in Eclipse
 - A1.4 Git in Bash
 - A1.5 Git in Zsh
 - A1.6 Git in Powershell
 - A1.7 Riassunto
 
 - 
  
A2. Appendice B: Embedding Git in your Applications
- A2.1 Command-line Git
 - A2.2 Libgit2
 - A2.3 JGit
 
 - 
  
A3. Appendice C: Git Commands
- A3.1 Setup and Config
 - A3.2 Getting and Creating Projects
 - A3.3 Basic Snapshotting
 - A3.4 Branching and Merging
 - A3.5 Sharing and Updating Projects
 - A3.6 Inspection and Comparison
 - A3.7 Debugging
 - A3.8 Patching
 - A3.9 Email
 - A3.10 External Systems
 - A3.11 Administration
 - A3.12 Plumbing Commands
 
 
1.2 Per Iniziare - Una Breve Storia di Git
Una Breve Storia di Git
Come per molte grandi cose della vita, Git è nato con un po' di distruzione creativa e polemiche infuocate. Il kernel di Linux è un progetto software open source di grande portata. Per buona parte del tempo (1991-2002) della manutenzione del kernel Linux le modifiche al software venivano passate sotto forma di patch e file compressi. Nel 2002, il progetto del kernel Linux iniziò ad utilizzare un sistema DVCS proprietario chiamato BitKeeper.
Nel 2005 il rapporto tra la comunità che sviluppa il kernel Linux e la società commerciale che aveva sviluppato BitKeeper si ruppe, e fu revocato l’uso gratuito di BitKeeper. Ciò indusse la comunità di sviluppo di Linux (e in particolare Linus Torvalds, il creatore di Linux) a sviluppare uno strumento proprio, basandosi su alcune delle lezioni apprese durante l’utilizzo di BitKeeper. Alcuni degli obiettivi del nuovo sistema erano i seguenti:
- 
Velocità
 - 
Design semplice
 - 
Ottimo supporto allo sviluppo non-lineare (migliaia di rami paralleli)
 - 
Completamente distribuito
 - 
Capacità di gestire, in modo efficiente (velocità e dimensione dei dati), grandi progetti come il kernel Linux
 
Fin dalla sua nascita nel 2005 Git si è evoluto e maturato per essere facile da usare e tuttora mantiene le sue qualità iniziali. È incredibilmente veloce, è molto efficiente con progetti grandi e ha un incredibile sistema di ramificazioni, per lo sviluppo non lineare (Vedi [ch03-git-branching]).