Git e Controllo Versione: Comandi Base e Workflow
Git è lo strumento fondamentale dello sviluppo software moderno. Questa guida copre i comandi base di Git, le strategie di branching e i workflow.
Ultimo aggiornamento:Cos'è Git e perché usarlo?
Git è un sistema di controllo versione distribuito. Traccia le modifiche del codice, gestisce diverse versioni e facilita la collaborazione in team.
Struttura distribuita: Ogni sviluppatore ha una copia completa del repository. Questo permette il lavoro offline e operazioni rapide.
Branching: Create branch separati per diverse funzionalità o correzioni. Questo mantiene il codice principale (main/master) sempre stabile.
Merge e rebase: Unite i branch nel branch principale. Merge preserva la cronologia dei commit. Rebase crea una cronologia lineare.
Comandi Base di Git
git init: Crea un nuovo repository. git clone <url>: Copia un repository esistente.
git add <file>: Aggiunge le modifiche all'area di staging. git add .: Aggiunge tutte le modifiche.
git commit -m "messaggio": Conferma le modifiche in staging. Scrivete messaggi di commit significativi.
git status: Verifica lo stato del repository. git log: Visualizza la cronologia dei commit.
git diff: Vede le differenze tra la directory di lavoro e l'area di staging. git diff --staged: Vede le differenze tra l'area di staging e l'ultimo commit.
Branching e Merging
git branch <name>: Crea un nuovo branch. git checkout <name> o git switch <name>: Passa al branch.
git merge <branch>: Unisce il branch nel branch corrente. Usa fast-forward merge o three-way merge.
Conflitto di merge: Risoluzione manuale richiesta per modifiche conflittuali. Modificate i file in conflitto, marcateli con git add, completate con git commit.
git branch -d <name>: Elimina il branch. git branch -D <name>: Forza l'eliminazione di un branch non unito.
Operazioni di Repository Remoto
git remote add origin <url>: Aggiunge repository remoto. git remote -v: Elenca i remotes.
git push origin <branch>: Invia le modifiche locali al remoto. git push -u origin main: Imposta il branch upstream.
git pull: Recupera e unisce le modifiche remote. git fetch: Recupera le modifiche remote (senza merge).
git push --force: Aggiorna forzatamente il branch remoto (usare con cautela). git push --force-with-lease: Force push più sicuro.
Strategie di Branching
Git Flow: main (produzione), develop (sviluppo), feature/* (nuove funzionalità), release/* (preparazione versione), hotfix/* (correzioni urgenti).
GitHub Flow: branch main + branch di funzionalità. Ogni branch di funzionalità viene unito a main tramite pull request. Semplice ed efficace.
Trunk-Based Development: Un unico branch main, branch di funzionalità di breve durata (1-2 giorni). Combinato con integrazione continua (CI/CD).
Criteri di selezione: Git Flow per progetti grandi, GitHub Flow per progetti piccoli-medi, Trunk-Based Development per team con CI/CD maturo.
Migliori Pratiche
Messaggi di commit: Usate modo imperativo ('Add feature' non 'Added feature'). Limitate la prima riga a 50 caratteri, i dettagli a 72 caratteri.
Commits atomici: Ogni commit dovrebbe contenere una sola modifica. Dividete le modifiche grandi in commit piccoli.
Nomenclatura dei branch: Usate nomi descrittivi come feature/user-authentication, bugfix/login-error, hotfix/security-patch.
.gitignore: Ignorate i file inutili (node_modules, .env, build/). Usate i template gitignore di GitHub.
Pull request: Usate le pull request per la revisione del codice. Ogni modifica dovrebbe essere revisionata da almeno una persona.