Git Setup
Guida completa per impostare Git - dalla configurazione al primo commit
Cos'è Git?
Git è un sistema di controllo versione distribuito che ti permette di:
- 📝 Tracciare le modifiche al codice nel tempo
- 🔄 Collaborare con altri sviluppatori
- ↩️ Tornare a versioni precedenti del progetto
- 🌿 Lavorare su più feature in parallelo (branches)
Git è lo standard de facto nello sviluppo software moderno, utilizzato da milioni di sviluppatori e aziende in tutto il mondo.
Perché Usare Git?
ℹ️ Vantaggi principali
- Backup automatico: Ogni commit è un punto di ripristino
- Collaborazione: Lavora in team senza conflitti
- Sperimentazione sicura: Testa nuove idee senza rischi
- Storia completa: Chi ha fatto cosa e quando
Installazione Git
macOS
# Tramite Homebrew (consigliato)
brew install git
# Verifica installazione
git --version
Windows
Scarica Git da git-scm.com e segui l'installer.
# Verifica installazione da Git Bash
git --version
Linux (Ubuntu/Debian)
sudo apt update
sudo apt install git
# Verifica installazione
git --version
Configurazione Iniziale
Prima di iniziare, configura il tuo nome e email (visibili nei commit):
# Imposta nome (globale per tutti i progetti)
git config --global user.name "Il Tuo Nome"
# Imposta email
git config --global user.email "tua.email@esempio.com"
# Editor di default (opzionale)
git config --global core.editor "code --wait" # VS Code
# Verifica configurazione
git config --list
⚠️ Email pubblica
L'email sarà visibile nella cronologia Git. Se usi GitHub, puoi utilizzare l'email no-reply:
username@users.noreply.github.com
Creare il Primo Repository
Opzione 1: Nuovo Progetto
# Crea cartella progetto
mkdir mio-progetto
cd mio-progetto
# Inizializza repository Git
git init
# Output: Initialized empty Git repository in /percorso/mio-progetto/.git/
Opzione 2: Progetto Esistente
# Naviga nella cartella del progetto
cd /percorso/progetto-esistente
# Inizializza Git
git init
Anatomia di un Commit
Un commit è uno snapshot del tuo progetto in un momento specifico. È composto da:
- Modifiche ai file (cosa è cambiato)
- Messaggio descrittivo (perché è cambiato)
- Metadata (chi, quando, parent commit)
- Hash univoco (identificatore SHA-1)
Workflow: Dal File al Commit
Git utilizza tre "aree" principali:
Working Directory → Staging Area → Repository
(modifica) (git add) (git commit)
1. Working Directory
Cartella con i tuoi file di lavoro.
2. Staging Area (Index)
Area intermedia dove "prepari" i file per il commit.
3. Repository (.git)
Database con tutta la storia dei commit.
Il Tuo Primo Commit - Passo per Passo
Step 1: Crea un File
# Crea file README
echo "# Mio Primo Progetto Git" > README.md
# Verifica contenuto
cat README.md
Step 2: Controlla lo Status
git status
Output:
On branch main
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
README.md
nothing added to commit but untracked files present
ℹ️ Cosa significa?
- Untracked: Git vede il file ma non lo sta ancora tracciando
- Suggerimento: Usa
git addper iniziare a tracciarlo
Step 3: Aggiungi File alla Staging Area
# Aggiungi singolo file
git add README.md
# OPPURE aggiungi tutti i file
git add .
# Verifica status
git status
Output:
On branch main
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: README.md
Step 4: Crea il Commit
git commit -m "feat: add README with project description"
Output:
[main (root-commit) a1b2c3d] feat: add README with project description
1 file changed, 1 insertion(+)
create mode 100644 README.md
✅ Congratulazioni! 🎉
Hai appena creato il tuo primo commit Git! Il codice
a1b2c3dè l'hash univoco del tuo commit.
Anatomia di un Buon Commit Message
Formato Conventional Commits
<tipo>(<scope>): <descrizione breve>
[corpo opzionale]
[footer opzionale]
Tipi Comuni
| Tipo | Significato | Esempio |
|---|---|---|
feat | Nuova feature | feat: add user authentication |
fix | Bug fix | fix: resolve login timeout issue |
docs | Documentazione | docs: update API reference |
style | Formattazione | style: format code with prettier |
refactor | Refactoring | refactor: simplify user validation |
test | Test | test: add unit tests for auth |
chore | Maintenance | chore: update dependencies |
Best Practices
✅ DO:
git commit -m "fix: resolve null pointer in user profile"
git commit -m "feat: add dark mode toggle to settings"
git commit -m "docs: update installation guide for Windows"
❌ DON'T:
git commit -m "fix stuff"
git commit -m "update"
git commit -m "asdfghjkl"
git commit -m "work in progress"
💡 Regola d'oro
Scrivi commit message che completino la frase: "Se applicato, questo commit..."
Esempio: "Se applicato, questo commit aggiungerà il toggle dark mode"
Comandi Essenziali
Visualizzare la Storia
# Log completo
git log
# Log compatto (una riga per commit)
git log --oneline
# Log con grafico branches
git log --oneline --graph --all
# Ultimi 5 commit
git log -5
Vedere le Modifiche
# Differenze working directory vs staging
git diff
# Differenze staging vs ultimo commit
git diff --staged
# Differenze con commit specifico
git diff a1b2c3d
Controllare lo Stato
# Status dettagliato
git status
# Status compatto
git status -s
Workflow Completo - Esempio Pratico
Simuliamo lo sviluppo di una piccola feature:
# 1. Crea file index.html
echo "<!DOCTYPE html><html><body><h1>Hello World</h1></body></html>" > index.html
# 2. Controlla status
git status
# Output: index.html è untracked
# 3. Aggiungi a staging
git add index.html
# 4. Commit
git commit -m "feat: create homepage with Hello World"
# 5. Modifica file
echo "<p>Welcome to my website</p>" >> index.html
# 6. Vedi cosa è cambiato
git diff
# Output: mostra la riga aggiunta
# 7. Staging + Commit in un comando (solo file già tracciati)
git commit -am "feat: add welcome message to homepage"
# 8. Visualizza cronologia
git log --oneline
Output cronologia:
b3c4d5e feat: add welcome message to homepage
a1b2c3d feat: create homepage with Hello World
File .gitignore
Alcuni file non dovrebbero essere tracciati (es. password, file temporanei, dipendenze).
Crea .gitignore
# Crea file
touch .gitignore
Esempio .gitignore per Node.js
# Dependencies
node_modules/
# Environment variables
.env
.env.local
# Build output
dist/
build/
# IDE
.vscode/
.idea/
# OS
.DS_Store
Thumbs.db
# Logs
*.log
npm-debug.log*
Aggiungi al Repository
git add .gitignore
git commit -m "chore: add gitignore for Node.js project"
Cosa Fare se Sbagli
Modificare l'Ultimo Commit
# Hai dimenticato un file?
git add file-dimenticato.txt
git commit --amend --no-edit
# Vuoi cambiare il messaggio?
git commit --amend -m "feat: nuovo messaggio corretto"
⚠️ Attenzione
--amendriscrive la storia! Usalo solo se non hai ancora fatto push.
Togliere File dalla Staging
# Unstage singolo file
git restore --staged file.txt
# Unstage tutto
git restore --staged .
Scartare Modifiche Locali
# Scarta modifiche a singolo file
git restore file.txt
# Scarta tutte le modifiche (ATTENZIONE: irreversibile!)
git restore .
Prossimi Passi
Ora che hai padroneggiato il commit, ecco cosa imparare dopo:
- Branches - Lavorare su feature isolate
- Merge - Unire modifiche da branch diversi
- Remote - Collegare GitHub/GitLab
- Pull/Push - Sincronizzare con repository remoto
- Collaboration - Pull requests e code review
Risorse Utili
Documentazione Ufficiale
Tools Visivi
- GitKraken - GUI per Git
- GitHub Desktop - Client GitHub ufficiale
- Sourcetree - Git client gratuito
Cheat Sheets
Esercizi Interattivi
- Learn Git Branching - Tutorial interattivo
- Git Exercises - Esercizi pratici
Conclusione
Hai imparato:
- ✅ Cos'è Git e perché usarlo
- ✅ Installare e configurare Git
- ✅ Creare repository e commit
- ✅ Workflow: working directory → staging → commit
- ✅ Best practices per commit messages
- ✅ Comandi essenziali (status, log, diff)
- ✅ Gestire .gitignore
- ✅ Correggere errori comuni
Git può sembrare complesso all'inizio, ma con la pratica diventerà naturale. Commita spesso, commita presto!
✅ Challenge
Esercizio pratico: Crea un repository Git, scrivi 5 file diversi (HTML, CSS, JS) e fai un commit per ogni file con un messaggio appropriato. Poi usa
git log --oneline --graphper visualizzare la cronologia!