Cos'è Git e perché dovresti usarlo

Cos'è Git
Git è un sistema di controllo di versione distribuito che traccia le modifiche ai file e consente ai team di collaborare in modo efficiente sullo stesso progetto. È stato creato da Linus Torvalds nel 2005 per lo sviluppo del kernel Linux ed è da allora diventato lo standard de facto del settore. Che tu lavori da solo su un piccolo progetto o in un team di cento sviluppatori, Git ti permette di tracciare ogni modifica, tornare a versioni precedenti e lavorare in parallelo su più funzionalità senza conflitti.
A differenza di sistemi più datati come SVN, Git è distribuito, il che significa che ogni sviluppatore ha una copia completa dell'intera cronologia del progetto sul proprio computer. Questo consente di lavorare senza connessione a internet, operazioni più rapide perché la maggior parte delle cose viene eseguita in locale e una maggiore resistenza alla perdita di dati, perché ogni clone è un backup completo. Conoscere Git è ormai una competenza di base per ogni programmatore e sviluppatore web.
Perché usare Git
Tracciamento delle modifiche
Senza un sistema di controllo di versione, i programmatori si affidano alla copia manuale dei file. Per archiviare i progetti, valuta uno spazio di backup con nomi come sito-v2-copia-finale-2.zip. Questo approccio è insostenibile, perché diventa rapidamente impossibile sapere quale versione contiene quali modifiche. Git registra automaticamente ogni modifica con le informazioni su chi l'ha fatta, quando e perché. Puoi vedere l'intera cronologia del progetto, confrontare due versioni qualsiasi e sapere esattamente quale riga di codice è stata modificata in qualsiasi momento.
Ogni commit in Git è uno snapshot dello stato del progetto in un momento preciso, con un messaggio che descrive cosa è cambiato e perché. Questo è prezioso quando, mesi dopo, devi capire perché è stata fatta una modifica o trovare il commit che ha introdotto un bug. Il comando git blame mostra chi ha modificato per ultimo ogni riga di codice, velocizzando l'individuazione dei responsabili di una specifica parte del codice.
Branch e lavoro in parallelo
I branch di Git sono una delle funzionalità più potenti. Un branch è una linea di sviluppo indipendente che ti permette di lavorare su una nuova funzionalità senza intaccare il codice principale. Puoi creare un branch per ogni correzione di bug o nuova funzionalità, lavorarci per tutto il tempo necessario e unirlo al branch principale solo quando tutto è testato e pronto. Se la funzionalità si rivela una cattiva idea, basta eliminare il branch senza alcuna conseguenza per il resto del progetto.
In un team, ogni programmatore può lavorare sul proprio branch senza preoccuparsi di sovrascrivere il lavoro altrui. Git unisce automaticamente le modifiche provenienti da branch diversi e nella maggior parte dei casi lo fa senza intervento. Quando si verifica un conflitto, Git contrassegna chiaramente le parti problematiche e chiede al programmatore di risolverlo manualmente. Questo è di gran lunga meglio dello scenario alternativo in cui due programmatori modificano lo stesso file e uno sovrascrive il lavoro dell'altro senza preavviso.
Backup e ripristino
Ogni repository Git su un server remoto come GitHub funge da backup dell'intero progetto con la cronologia completa. Anche se il tuo disco rigido si guasta, puoi clonare il repository su un nuovo computer in pochi secondi e continuare il lavoro esattamente da dove l'avevi lasciato. Git conserva ogni versione di ogni file mai committato, il che significa che puoi riportare qualsiasi file a qualsiasi stato precedente. È un'assicurazione sulla vita per ogni progetto.
Comandi Git di base
Inizializzazione e configurazione
Iniziare con Git richiede l'installazione e una configurazione di base. Sulla maggior parte delle distribuzioni Linux, Git è già installato oppure si installa con apt install git o dnf install git. Su macOS arriva con gli Xcode Command Line Tools. Dopo l'installazione, configura il nome e l'email usati nei commit con git config global user.name "Il Tuo Nome" e git config global user.email tu@email.com. Queste informazioni vengono registrate con ogni commit.
Crei un nuovo repository con git init nella directory del progetto. Questo crea una cartella nascosta .git che contiene l'intera cronologia e la configurazione del repository. In alternativa, puoi clonare un repository esistente con git clone URL, che scarica il progetto con tutta la cronologia sul tuo computer. Il file .gitignore definisce quali file Git deve ignorare, come la directory node_modules, i file .env con i segreti e i file binari compilati.
Comandi di tutti i giorni
Il comando git status mostra lo stato attuale del repository — quali file sono stati modificati, quali sono aggiunti alla staging area e quali non sono tracciati. Usalo spesso per avere una panoramica di ciò che accade. Git add aggiunge i file alla staging area, che è la preparazione al commit. Puoi aggiungere singoli file con git add nomefile.js oppure tutti i file modificati con git add ., ma fai attenzione a non aggiungere file indesiderati.
Il comando git commit crea uno snapshot dello stato attuale della staging area con un messaggio descrittivo. Un buon messaggio di commit è breve ma informativo, ad esempio "Aggiungi la validazione del campo email nel modulo di contatto." La convenzione è scrivere i messaggi all'imperativo, come se descrivessero cosa fa il commit. Git log mostra la cronologia dei commit con identificatori hash, autori, date e messaggi. Usa git log oneline per una panoramica compatta o git log graph per la visualizzazione grafica dei branch.
Lavorare con i branch
Creare un nuovo branch: git branch nome-branch crea un branch ma non vi passa. Git checkout nome-branch passa a un branch esistente. La combinazione git checkout -b nome-branch crea un nuovo branch e vi passa immediatamente, che è il flusso di lavoro più comune. Git moderno offre anche il comando git switch, un'alternativa più intuitiva a checkout quando si lavora con i branch. Dai ai branch nomi descrittivi come feature/ordini-online o fix/login-bug.
L'unione dei branch si fa con git merge nome-branch mentre ti trovi sul branch in cui vuoi unire le modifiche. Il flusso tipico è: passare al branch principale, poi eseguire il merge del tuo feature branch. Se non ci sono conflitti, Git unisce automaticamente il codice. Se ci sono conflitti, Git contrassegna le parti problematiche nei file con appositi marcatori e scegli manualmente quali modifiche mantenere. Dopo aver risolto i conflitti, committi il risultato.
GitHub e repository remoti
GitHub è la piattaforma più popolare per l'hosting di repository Git, con oltre 100 milioni di utenti. Oltre all'archiviazione del codice, GitHub offre il tracciamento degli issue, il workflow delle pull request, CI/CD con GitHub Actions, pagine wiki e molto altro. Tra le piattaforme alternative ci sono GitLab, che offre il self-hosting, e Bitbucket, che si integra bene con gli strumenti Atlassian come Jira.
Il comando git remote add origin URL collega il repository locale a quello remoto su GitHub. Git push invia i tuoi commit al server remoto, dove gli altri membri del team possono vederli e scaricarli. Git pull scarica le ultime modifiche dal remoto e le unisce al tuo codice locale. Git fetch scarica le modifiche ma non le unisce automaticamente, dandoti la possibilità di esaminarle prima del merge.
Workflow delle Pull Request
Una pull request o PR è un meccanismo per la revisione del codice prima dell'unione con il branch principale. Il programmatore crea un branch, committa le modifiche, fa il push su GitHub e apre una PR con una descrizione delle modifiche. Gli altri membri del team esaminano il codice, lasciano commenti e suggerimenti. Solo dopo l'approvazione di uno o più revisori la PR viene unita al branch principale. Questo workflow garantisce la qualità del codice e la condivisione delle conoscenze nel team, perché ogni programmatore vede cosa fanno gli altri.
Una buona PR ha un messaggio chiaro che descrive cosa è cambiato e perché, una dimensione ragionevole — perché rivedere una PR con migliaia di righe di codice è impossibile — e controlli automatici come test e linting eseguiti tramite CI/CD. GitHub Actions può eseguire automaticamente i test a ogni push e mostrare il risultato sulla PR, impedendo l'unione di codice che rompe i test.
Git nel workflow di deployment
Git è il fondamento del deployment moderno, specialmente sui server VPS. L'approccio più semplice è il deployment manuale, in cui si esegue git pull sul server per scaricare le ultime modifiche. È sufficiente per piccoli siti ma non scala bene ed è soggetto a errori umani. Un approccio migliore è il deployment automatizzato, in cui un push su un determinato branch come main attiva automaticamente il deployment tramite una pipeline CI/CD.
Un tipico workflow automatizzato si presenta così: il programmatore fa il push del codice su GitHub, GitHub Actions esegue test e build, se tutto va a buon fine il codice viene distribuito automaticamente sul server di staging per i test e, dopo l'approvazione, viene distribuito in produzione. Questo approccio elimina la possibilità di dimenticare di eseguire i test o di distribuire la versione sbagliata. In BeoHosting supportiamo il deployment Git per tutti i pacchetti hosting, con automazione tramite webhook.
Strategie Git per i team
Git Flow è una popolare strategia di branching che definisce i ruoli dei diversi branch: main per il codice di produzione, develop per lo sviluppo, feature branch per le nuove funzionalità, release branch per la preparazione delle versioni e hotfix branch per le correzioni urgenti in produzione. Questa strategia è completa ma può risultare eccessivamente complessa per i piccoli team. Il trunk-based development è un'alternativa più semplice in cui tutti i programmatori committano direttamente sul branch principale con brevi feature branch della durata di uno o due giorni.
Indipendentemente dalla strategia, diverse regole sono universali: non committare mai direttamente sul branch principale, usa sempre una PR per la revisione, scrivi messaggi di commit descrittivi, mantieni i commit piccoli e focalizzati su una sola modifica e non committare mai segreti come password o chiavi API. Se committi accidentalmente un segreto, cambialo immediatamente, perché anche dopo averlo eliminato dalla cronologia è possibile che qualcuno l'abbia già scaricato.
Conclusione
Git è uno strumento indispensabile per chiunque lavori con il codice, che tu sia uno sviluppatore solitario o parte di un grande team. Investire nell'apprendimento di Git si ripaga molte volte attraverso una migliore organizzazione, la sicurezza del codice e un lavoro di squadra più efficiente. Inizia con i comandi di base, usa GitHub per l'hosting dei repository e introduci gradualmente workflow più avanzati. In BeoHosting supportiamo il deployment Git per tutti i pacchetti hosting, permettendoti di distribuire in modo rapido e affidabile direttamente dal tuo repository.
BeoHosting Team
10+ anni di esperienza — Specialisti di web hosting e infrastrutture
- Web Hosting
- WordPress Hosting
- VPS
- Dedicated Serveri
- Domeni
- SSL
- cPanel
- LiteSpeed
- Linux administracija
- DNS
Ultimo aggiornamento: