Esplorare il controllo del codice sorgente e il controllo della versione

Completato

L'uso del controllo del codice sorgente e della versione è una procedura fondamentale di DevOps. È anche un prerequisito per queste procedure, ad esempio l'integrazione continua e l'infrastruttura come codice, entrambi fondamentali per raggiungere il potenziale DevOps completo. L'organizzazione nello scenario di esempio deve esaminare la strategia di sviluppo software collaborativo corrente e passare a un modello di controllo della versione distribuita, ad esempio Git, considerando in particolare i piani per l'uso di GitHub per la gestione del ciclo di vita del software. Questo, tuttavia, richiede una buona comprensione dei principi di controllo della versione e del codice sorgente e dei relativi vantaggi, che verranno illustrati qui.

Controllo del codice sorgente e controllo della versione

Screenshot di un sistema di controllo del codice sorgente con più file e la relativa cronologia delle versioni.

I termini controllo del codice sorgente e controllo della versione vengono spesso usati in modo intercambiabile e in molti contesti fanno riferimento allo stesso concetto. In generale, entrambi sono associati alla pratica di gestione delle modifiche al codice in un ambiente di sviluppo condiviso. Tuttavia, è possibile riscontrare scenari più sfumati in cui il loro significato è leggermente diverso. In questi scenari, controllo del codice sorgente designa un sistema che gestisce le modifiche ai file di codice sorgente mentre controllo della versione include la gestione delle modifiche di qualsiasi tipo di file per scopi che si estendono oltre il codice sorgente da solo. In futuro, per coerenza, si userà il termine controllo della versione per rappresentare i repository software collaborativi basati su Git disponibili in GitHub e Azure DevOps.

Quali sono i vantaggi del controllo della versione?

Il controllo della versione tiene traccia delle modifiche apportate ai file all'interno dell'ambito di gestione. Questo offre un'ampia gamma di vantaggi:

  • cronologia e rilevamento delle versioni: è possibile esaminare la cronologia delle modifiche apportate a qualsiasi file, inclusa la possibilità di determinare quando è stata apportata ogni singola modifica e qual è l'ambito. Ciò garantisce anche la tracciabilità, in genere associando ogni set di modifiche a un identificatore univoco.

  • Rollback e ripristino: Se si verifica un errore o un problema, è possibile annullare facilmente le modifiche per recuperare la versione nota e funzionante del file interessato.

  • Diramazione e unione: se è necessario estendere la funzionalità del codice corrente aggiungendo un'altra funzionalità o correggendo un bug appena individuato, è possibile creare un cosiddetto ramo, che consente di lavorare in modo indipendente rispetto alla codebase esistente. Il nuovo ramo è inizialmente identico al ramo principale che ospita il codice corrente. Dopo aver completato le modifiche, unire il nuovo ramo con il ramo principale. Anche se questo potrebbe comunque causare conflitti (se un altro sviluppatore ha deciso di modificare lo stesso set di file nel frattempo tramite un altro ramo), il loro ambito è limitato e in genere possono essere facilmente identificati e risolti.

    Screenshot di una strategia di diramazione con più rami, tra cui main, bugfix e feature.

  • collaborazione e sviluppo parallelo: le disposizioni di risoluzione dei conflitti integrate dalla diramazione e dall'unione facilitano l'uso di più sviluppatori sulla stessa codebase, aumentando così l'efficienza. Con i sistemi di controllo distribuiti, ad esempio Git, è anche possibile creare codice in modalità disconnessa. La collaborazione comporta anche revisioni tra pari delle pull request, promuovendo la condivisione delle conoscenze e la trasparenza.

  • Automazione: il controllo della versione è una parte essenziale dell'integrazione continua e delle distribuzioni automatizzate. La compilazione e il test automatizzati possono essere attivati automaticamente ogni volta che viene eseguito il push di una nuova versione del codice nel repository del controllo della versione o unito al ramo principale. È possibile distribuire versioni diverse del codice in ambienti diversi.