Git 31
🔀 Git & GitHub · Modulo 6 · Lezione 31
Setup ambiente personale 🖥️
Configurazione definitiva · SSH · Alias avanzati · Git in VS Code · Personalizzazione del terminale
🖥️ Nella Lezione 02 hai fatto il minimo indispensabile: installare Git e configurare nome/email. Ora è il momento di trasformare il tuo ambiente di lavoro in qualcosa di professionale e produttivo. In questa lezione configuri SSH (per non digitare mai più la password), crei alias che ti fanno risparmiare tempo ogni giorno, personalizzi VS Code per lavorare con Git in modo visuale, e configuri il terminale per mostrarti il branch corrente. Farai queste cose una volta — e ne beneficerai per sempre.
🎯 Obiettivi della lezione
- Verificare e completare la configurazione SSH con GitHub
- Creare alias Git avanzati per velocizzare il lavoro quotidiano
- Configurare VS Code come ambiente Git integrato
- Personalizzare il terminale per mostrare branch e stato
- Impostare un file
.gitconfigcompleto e professionale - Conoscere i tool opzionali che migliorano la produttività
📖 1. Teoria
1.1 — Checklist: dove sei adesso?
Prima di iniziare, verifica cosa hai già fatto e cosa manca:
$ git –version
git version 2.43.0 ← deve essere ≥ 2.23
# 2. Nome e email configurati?
$ git config –global user.name
Mario Rossi
$ git config –global user.email
mario.rossi@email.it
# 3. SSH configurato?
$ ssh -T git@github.com
Hi mario-rossi! You’ve successfully authenticated ← OK!
# Se dice “Permission denied”: segui la sezione 1.2
# 4. Branch default è main?
$ git config –global init.defaultBranch
main ← OK!
1.2 — SSH: autenticazione senza password
Se non l’hai ancora fatto nella Lezione 13, ecco la procedura completa per configurare SSH. Con SSH, non devi mai più digitare username e password quando fai push o pull.
$ ssh-keygen -t ed25519 -C “tua@email.it”
# Premi Invio 3 volte (percorso default, nessuna passphrase)
# 2. Avvia l’agent SSH
$ eval “$(ssh-agent -s)”
$ ssh-add ~/.ssh/id_ed25519
# 3. Copia la chiave pubblica
# Windows (Git Bash):
$ cat ~/.ssh/id_ed25519.pub | clip
# macOS:
$ cat ~/.ssh/id_ed25519.pub | pbcopy
# Linux:
$ cat ~/.ssh/id_ed25519.pub ← copia manualmente
# 4. Aggiungi su GitHub:
# github.com → Settings → SSH and GPG keys → New SSH key
# Title: “Il mio laptop” → Incolla la chiave → Add SSH key
# 5. Testa
$ ssh -T git@github.com
Hi mario-rossi! You’ve successfully authenticated, but GitHub does not provide shell access.
📌 Se usi ancora HTTPS (ti chiede username/password): puoi convertire i tuoi repository esistenti a SSH con git remote set-url origin git@github.com:utente/repo.git. Da quel momento, push e pull usano SSH automaticamente.
1.3 — Alias Git avanzati: lavorare il doppio più veloce
Gli alias trasformano comandi lunghi in abbreviazioni. Nella Lezione 02 hai visto i base. Ecco un set completo per il lavoro quotidiano:
$ git config –global alias.s “status -s” # git s → status breve
$ git config –global alias.a “add .” # git a → add tutto
$ git config –global alias.c “commit -m” # git c “msg” → commit rapido
$ git config –global alias.p “push” # git p → push
$ git config –global alias.pl “pull” # git pl → pull
# === LOG VISUALE ===
$ git config –global alias.lg “log –oneline –graph –all –decorate”
# git lg → albero colorato dei commit
$ git config –global alias.last “log -1 –oneline”
# git last → ultimo commit
# === BRANCH ===
$ git config –global alias.sw “switch” # git sw main
$ git config –global alias.nb “switch -c” # git nb feature/x → nuovo branch
$ git config –global alias.br “branch -a” # git br → tutti i branch
# === WORKFLOW RAPIDO ===
$ git config –global alias.ac ‘!git add . && git commit -m’
# git ac “msg” → add tutto + commit in un colpo
$ git config –global alias.acp ‘!f() { git add . && git commit -m “$1” && git push; }; f’
# git acp “msg” → add + commit + push in un colpo
# === DIFF E PULIZIA ===
$ git config –global alias.d “diff”
$ git config –global alias.ds “diff –staged”
$ git config –global alias.undo “restore .” # git undo → scarta tutte le modifiche
| Operazione | Senza alias | Con alias |
|---|---|---|
| Vedere lo stato | git status -s | git s |
| Add + commit | git add . && git commit -m “msg” | git ac “msg” |
| Add + commit + push | git add . && git commit -m “msg” && git push | git acp “msg” |
| Nuovo branch | git switch -c feature/pagina | git nb feature/pagina |
| Log visuale | git log –oneline –graph –all –decorate | git lg |
1.4 — Il .gitconfig completo
Tutti gli alias e le configurazioni finiscono in un unico file: ~/.gitconfig. Ecco un esempio completo che puoi adottare direttamente:
[user]
name = Mario Rossi
email = mario.rossi@email.it
[init]
defaultBranch = main
[core]
editor = code –wait # VS Code come editor per commit
autocrlf = true # Windows: converte line endings
# Su macOS/Linux usa: autocrlf = input
[pull]
rebase = false # pull fa merge (non rebase) — più sicuro
[push]
default = current # push del branch corrente senza specificare il nome
[alias]
s = status -s
a = add .
c = commit -m
p = push
pl = pull
sw = switch
nb = switch -c
br = branch -a
lg = log –oneline –graph –all –decorate
last = log -1 –oneline
d = diff
ds = diff –staged
undo = restore .
ac = !git add . && git commit -m
acp = “!f() { git add . && git commit -m \”$1\” && git push; }; f”
1.5 — VS Code: il migliore amico di Git
VS Code ha integrazione Git nativa — non serve nessuna estensione per le operazioni base. Ma alcune estensioni lo rendono eccezionale:
| Funzione / Estensione | Cosa fa | Integrata? |
|---|---|---|
| Source Control (sidebar) | Stage, commit, push, pull — tutto visuale con click | ✅ Nativa |
| Diff inline | Vedi le modifiche riga per riga con colori nell’editor | ✅ Nativa |
| GitLens ⭐ | Blame inline (chi ha scritto ogni riga), storia del file, grafo dei commit | Estensione |
| Git Graph | Visualizza la storia come un grafo interattivo con branch e merge | Estensione |
| GitHub Pull Requests | Gestisci PR e issue direttamente da VS Code | Estensione |
$ code –install-extension eamodio.gitlens
$ code –install-extension mhutchie.git-graph
$ code –install-extension github.vscode-pull-request-github
git add.git commit -m.1.6 — Personalizzare il terminale: mostrare il branch
Il prompt del terminale può mostrare il branch corrente e lo stato del repository. Questo è utile perché sai sempre “dove sei” senza digitare git status.
mario@pc MINGW64 ~/progetti/sito (main)
$
~/.bashrc o ~/.zshrc. Vedi i comandi sotto.parse_git_branch() {
git branch 2>/dev/null | sed -e ‘/^[^*]/d’ -e ‘s/* \(.*\)/ (\1)/’
}
export PS1=”\u@\h \[\033[32m\]\w\[\033[33m\]\$(parse_git_branch)\[\033[00m\] $ “
# Per Zsh (macOS default): aggiungi a ~/.zshrc
autoload -Uz vcs_info
precmd() { vcs_info }
zstyle ‘:vcs_info:git:*’ formats ‘ (%b)’
setopt PROMPT_SUBST
PROMPT=’%n@%m %F{green}%~%f%F{yellow}${vcs_info_msg_0_}%f $ ‘
# Dopo la modifica, ricarica:
$ source ~/.bashrc # o source ~/.zshrc
📌 Alternativa più potente: Oh My Zsh / Oh My Bash. Sono framework che personalizzano il terminale con temi, plugin e prompt informativi (branch, stato, ora). Installazione: sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)". Il tema “robbyrussell” mostra il branch Git per default.
1.7 — Impostazioni Git utili
$ git config –global color.ui auto
# Push del branch corrente senza specificare il nome
$ git config –global push.default current
# Prima: git push -u origin feature/x
# Dopo: git push (basta)
# Autostash prima di pull (salva le modifiche non committate)
$ git config –global rebase.autoStash true
# Mostra i nomi dei file nel diff, non solo il contenuto
$ git config –global diff.stat true
# Velocizza Git con file grandi
$ git config –global core.preloadindex true
$ git config –global core.fscache true
💻 2. Esempi guidati
Esempio A — Setup completo in 10 minuti
$ git –version
# 2. Configura identità (se non fatto)
$ git config –global user.name “Il Tuo Nome”
$ git config –global user.email “tua@email.it”
# 3. Configura editor e default
$ git config –global core.editor “code –wait”
$ git config –global init.defaultBranch main
$ git config –global push.default current
$ git config –global pull.rebase false
# 4. Alias essenziali (copia-incolla tutto)
$ git config –global alias.s “status -s”
$ git config –global alias.lg “log –oneline –graph –all –decorate”
$ git config –global alias.sw “switch”
$ git config –global alias.nb “switch -c”
$ git config –global alias.ac ‘!git add . && git commit -m’
# 5. Verifica SSH
$ ssh -T git@github.com
# 6. Installa estensioni VS Code
$ code –install-extension eamodio.gitlens
$ code –install-extension mhutchie.git-graph
# 7. Verifica tutto
$ git config –list –global
✅ Setup completo!
Esempio B — Workflow quotidiano con alias
$ git pl ← pull
$ git nb feature/form-contatti ← nuovo branch
# Lavoro: modifica, controlla, committa
$ git s ← stato breve
M contatti.html
?? style-contatti.css
$ git d ← diff delle modifiche
$ git ac “Aggiunto form contatti con validazione” ← add + commit
# Fine giornata: pusha
$ git p ← push
$ git lg ← log visuale per verificare
🏋️ 3. Esercizi
🟢 Esercizio 1 — Checklist di verifica (Facile)
a)
git --version → versione ≥ 2.23?b)
git config --global user.name → il tuo nome?c)
git config --global user.email → la tua email?d)
ssh -T git@github.com → autenticazione riuscita?e)
git config --global init.defaultBranch → “main”?f) Se qualcosa manca, correggi seguendo la lezione. Alla fine: tutto verde?
🔵 Esercizio 2 — Configura gli alias (Medio)
b) In un repository esistente, prova ogni alias:
git s, git lg, git last.c) Crea un branch con
git nb test-alias. Funziona?d) Fai una modifica, poi usa
git ac "Test alias". Ha fatto add + commit?e) Verifica tutti gli alias:
git config --global --get-regexp alias.f) Inventa un alias personalizzato che ti sarebbe utile e aggiungilo.
🟠 Esercizio 3 — VS Code + Git (Medio)
b) Apri un repository in VS Code. Nella sidebar Source Control, fai: modifica un file → stage (+) → scrivi messaggio → commit (✓).
c) Clicca il nome del branch nella barra di stato. Crea un nuovo branch da VS Code.
d) Apri Git Graph (Ctrl+Shift+P → “Git Graph: View Git Graph”). Vedi la storia dei commit?
e) Con GitLens attivo, posiziona il cursore su una riga di codice. Vedi chi l’ha scritta e quando?
f) Fai push e pull dalla barra di stato (frecce ↑↓).
🟣 Esercizio 4 — Esporta il tuo setup (Difficile)
dotfiles che contiene la tua configurazione, condivisibile con il team:a) Crea un repository
dotfiles su GitHub.b) Copia il tuo
~/.gitconfig nel repository.c) Crea un file
setup.sh che: verifica le versioni, configura Git, installa le estensioni VS Code.d) Aggiungi un
README.md che spiega come usare il setup: “Clona il repo, esegui bash setup.sh“.e) Committa e pusha. Condividi il link con i compagni — possono replicare il tuo ambiente in 5 minuti.
f) Bonus: aggiungi il tuo
.bashrc / .zshrc con il prompt Git personalizzato.
❓ 4. Quiz di verifica
1. Perché SSH è meglio di HTTPS per autenticarsi con GitHub?
Mostra risposta
Con SSH, non devi mai digitare username e password — l’autenticazione avviene automaticamente con la coppia di chiavi (pubblica/privata). Con HTTPS, devi usare un Personal Access Token (PAT) e gestire la cache delle credenziali. SSH è più sicuro (la chiave privata non lascia mai il tuo computer), più comodo (zero input manuale) e più stabile (non scadono come i PAT). Una volta configurato, funziona per sempre per tutti i repository.
2. Come converti un repository esistente da HTTPS a SSH?
Mostra risposta
Con il comando git remote set-url origin git@github.com:utente/repo.git. Questo cambia l’URL del remoto “origin” da HTTPS (https://github.com/...) a SSH (git@github.com:...). Puoi verificare con git remote -v che l’URL sia cambiato. Da quel momento, push e pull usano SSH. La chiave SSH deve essere già configurata e aggiunta su GitHub (Settings → SSH and GPG keys). Non serve riclonare il repository.
3. Cosa fa l’alias git ac "messaggio"?
Mostra risposta
Esegue git add . (aggiunge tutte le modifiche all’area di staging) seguito da git commit -m "messaggio" (committa con il messaggio specificato). Sono due comandi combinati in uno. L’alias è definito come !git add . && git commit -m — il ! iniziale dice a Git di eseguire il comando come shell command (non come sottocomando Git). L’operatore && garantisce che il commit avvenga solo se l’add ha successo.
4. Cosa fa git config --global push.default current?
Mostra risposta
Configura Git per pushare automaticamente il branch corrente al remoto con lo stesso nome, senza doverlo specificare. Senza questa impostazione, la prima volta che pushi un nuovo branch devi scrivere git push -u origin nome-branch. Con push.default current, basta git push e Git sa che vuoi pushare il branch su cui sei. È un’impostazione di comodità che fa risparmiare tempo ogni giorno.
5. Cos’è GitLens e perché è utile?
Mostra risposta
GitLens è un’estensione di VS Code che aggiunge informazioni Git avanzate direttamente nell’editor. La funzione più utile è il blame inline: accanto a ogni riga di codice vedi chi l’ha scritta, quando e in quale commit. Mostra anche la storia completa di ogni file, un grafo visuale dei commit, e permette di confrontare versioni diverse dello stesso file. È particolarmente utile nel lavoro di team perché rispondi immediatamente a “chi ha scritto questa riga?” e “perché è stata cambiata?”.
6. Dove sono salvati tutti gli alias e le configurazioni globali di Git?
Mostra risposta
Nel file ~/.gitconfig (la home directory dell’utente). Su Windows è C:\Users\TuoNome\.gitconfig, su macOS e Linux è /home/tuonome/.gitconfig. Ogni comando git config --global modifica questo file. Puoi anche editarlo direttamente con un editor di testo: git config --global --edit lo apre nell’editor configurato. Il file è in formato INI con sezioni come [user], [alias], [core]. Puoi copiarlo su un altro computer per replicare la tua configurazione.
📚 Riepilogo della lezione
- SSH:
ssh-keygen -t ed25519→ aggiungi su GitHub → mai più password - Converti repo esistenti:
git remote set-url origin git@github.com:... - Alias:
git s,git lg,git ac,git acp,git nb— velocità quotidiana - .gitconfig completo: identità, editor, push.default, alias, colori
- VS Code: Source Control nativo + GitLens (blame) + Git Graph (grafo visuale)
- Terminale: prompt con branch corrente (Git Bash già pronto, Bash/Zsh da configurare)
push.default current: push senza specificare il branch- Dotfiles: esporta la configurazione in un repo per replicarla ovunque
Prossima lezione →
Lezione 32 — Consegnare compiti via repository
Il workflow per consegnare i compiti al prof.
Un repository per compito. Branch, commit puliti, scadenze.
Corso Git & GitHub · Per studenti e insegnanti · Lezione 31 di 45