Il controllo della versione (noto anche come controllo di revisione o controllo del codice sorgente) è una categoria di processi e strumenti progettati per tenere traccia di più versioni diverse di software, contenuto, documenti, siti Web e altre informazioni in fase di sviluppo. Qualsiasi sistema che fornisce il rilevamento delle modifiche e il controllo sul codice sorgente di programmazione e sulla documentazione può essere considerato software di controllo della versione. La pratica è stata una parte dei processi creativi quasi da quando esiste la scrittura.
Lo scopo del controllo della versione è garantire che le modifiche ai contenuti in fase di sviluppo vadano come pianificato. Sebbene il controllo della versione venga spesso eseguito da un'applicazione separata, può anche essere incorporato in programmi come ambienti di sviluppo integrati (IDE), elaboratori di testi, fogli di calcolo e, soprattutto, pagine e documenti web collaborativi. Il controllo della versione consente ai server in più posizioni di eseguire versioni diverse su siti diversi, anche se tali versioni vengono aggiornate contemporaneamente.
Nello sviluppo del software vengono utilizzati i sistemi di controllo delle versioni più potenti e complessi. Il controllo della versione spesso opera bloccando i file e utilizzando un sistema di check-out / check-in per le versioni modificate. Le versioni possono essere identificate da etichette o cartellini; le versioni approvate o quelle particolarmente significative possono essere designate linee di base. Le versioni estratte possono essere elaborate da diversi gruppi o individui come codice di diramazione dal tronco principale. Quando le versioni vengono estratte e archiviate, la prima che esegue l'archiviazione avrà esito positivo. Se vengono estratte altre versioni, alcuni sistemi possono prevedere l'unione delle versioni per consentire l'aggiunta di ulteriori modifiche nel repository centrale.
Un altro metodo utilizzato nel controllo della versione è il branching, in cui i programmi in sviluppo vengono copiati per lo sviluppo in versioni parallele, mantenendo l'originale e lavorando sul ramo o apportando modifiche diverse a ciascuno. Ogni copia è considerata una filiale; il programma originale da cui è tratto il ramo è denominato trunk, baseline, mainline o master.
Il controllo della versione è generalmente basato su un modello client-server. Un altro metodo è il controllo della versione distribuito, in cui tutte le copie sono in un repository codebase e le modifiche vengono sincronizzate tramite patch o modifiche condivise da peer a peer.
I termini controllo della versione e versioning a volte sono usati in modo intercambiabile anche se i loro significati tecnici sono diversi.