Lezione 31 di 35

Git 31

🔀 Git & GitHub · Modulo 6 · Lezione 31

Setup ambiente personale 🖥️

Configurazione definitiva · SSH · Alias avanzati · Git in VS Code · Personalizzazione del terminale

⏱️ Durata stimata: 60–75 min 📊 Livello: Tutti (Modulo 6 — Sezione Studenti) 🔧 Strumenti: Terminale · VS Code · GitHub 📋 Prerequisiti: Lezioni 02, 13 (installazione base e account GitHub)

🖥️ 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 .gitconfig completo 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:

# 1. Git è installato?
$ 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.

# 1. Genera la chiave (se non l’hai già)
$ 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:

# === ALIAS ESSENZIALI ===
$ 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
Prima vs Dopo: quanto risparmi
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:

# File: ~/.gitconfig

[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
# Installare le estensioni consigliate da terminale
$ code –install-extension eamodio.gitlens
$ code –install-extension mhutchie.git-graph
$ code –install-extension github.vscode-pull-request-github
Le operazioni Git in VS Code
Stage
Nella sidebar Source Control, clicca il + accanto al file (o “Stage All Changes”). È come git add.
Commit
Scrivi il messaggio nella casella di testo e clicca il ✓ (o Ctrl+Invio). È come git commit -m.
Push/Pull
Nella barra di stato in basso: clicca le frecce ↑↓ accanto al nome del branch. O usa il menu ⋯ → Push/Pull.
Branch
Nella barra di stato in basso a sinistra: clicca il nome del branch → scegli un altro branch o creane uno nuovo.

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.

Git Bash (Windows) ✅
Già configurato! Git Bash mostra il branch nel prompt per default:

mario@pc MINGW64 ~/progetti/sito (main)
$
macOS / Linux (Bash/Zsh)
Aggiungi al file ~/.bashrc o ~/.zshrc. Vedi i comandi sotto.
# Per Bash (macOS/Linux): aggiungi a ~/.bashrc
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

# Colori nei comandi Git (di solito già attivo)
$ 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

# 1. Verifica Git
$ 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

# Mattina: aggiorna e crea branch
$ 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)

Verifica ogni punto della checklist della sezione 1.1:
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)

a) Copia e esegui tutti i comandi alias della sezione 1.3.
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)

a) Installa GitLens e Git Graph in VS Code.
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)

Crea un repository 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

Cosa hai imparato oggi:
  • 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