Il software di controllo di versione, noto anche come sistema di controllo delle revisioni o controllo del codice sorgente, viene utilizzato per tracciare le modifiche ai progetti di sviluppo software e consentire ai membri del team di modificare e collaborare sugli stessi file. Il software di controllo di versione permette agli sviluppatori di lavorare simultaneamente sul codice e isolare il proprio lavoro attraverso quelli che sono noti come rami. I rami mantengono le modifiche al codice protette dalle modifiche in altri rami, ma possono essere uniti insieme se e quando lo sviluppatore è pronto. I sistemi di controllo di versione consentono agli sviluppatori di tracciare automaticamente il loro lavoro, vedere una cronologia di tutte le modifiche e tornare a versioni precedenti di un progetto quando necessario. Tutte le modifiche al codice e i rami sono conservati in un repository (spesso chiamato "repo").
I sistemi di controllo di versione sono utilizzati dai team di sviluppo software per semplificare il processo di sviluppo, gestire il codice per più progetti e mantenere una cronologia delle modifiche al codice. Quando si sceglie un software di controllo di versione, gli utenti spesso necessitano di una soluzione di hosting per il controllo di versione per ospitare il loro repository principale dove gli sviluppatori inviano le loro modifiche al codice. Gli sviluppatori spesso utilizzano client di controllo di versione per gestire la funzionalità dei loro sistemi di controllo di versione attraverso un'interfaccia grafica utente (GUI). I sistemi di controllo di versione si integrano con una varietà di strumenti di sviluppo software, inclusi IDE, software di automazione della build e fornitori di PaaS.
Per qualificarsi per l'inclusione nella categoria del Software di Controllo di Versione, un prodotto deve:
Fornire un meccanismo per gli sviluppatori per tenere traccia delle modifiche al codice
Consentire agli sviluppatori di vedere una cronologia delle modifiche
Consentire agli sviluppatori di lavorare sugli stessi file di codice contemporaneamente
Consentire agli sviluppatori di isolare il loro codice attraverso il branching
Unire il codice da diversi rami su comando
Mostrare agli sviluppatori i conflitti sulle unioni di codice e consentire agli sviluppatori di risolverli
Consentire agli sviluppatori di ripristinare le loro modifiche a uno stato precedente