Controle de versão (também conhecido como controle de revisão ou controle de fonte) é uma categoria de processos e ferramentas desenhadas para manter o controle de múltiplas versões diferentes de software, conteúdo, documentos, websites e outras informações em desenvolvimento. Qualquer sistema que forneça controle de mudanças e controle sobre programação de código fonte e documentação pode ser considerado um software de controle de versão. A prática tem sido uma parte dos processos criativos quase tanto quanto a escrita existe.
O objetivo do controle de versão é garantir que as mudanças de conteúdo em desenvolvimento corram conforme planejado. Embora o controle de versão seja frequentemente realizado por uma aplicação separada, ele também pode ser embutido em programas como ambientes de desenvolvimento integrado (IDEs), processadores de texto, planilhas e, especialmente, documentos e páginas web colaborativas. O controle de versão permite que servidores em vários locais executem versões diferentes em sites diferentes, mesmo enquanto essas versões estão sendo atualizadas simultaneamente.
Os sistemas de controle de versão mais poderosos e complexos são usados no desenvolvimento de software. O controlo de versões opera frequentemente através do bloqueio de ficheiros e utilizando um sistema de check-out / check-in para versões alteradas. As versões podem ser identificadas por etiquetas ou tags; as versões aprovadas ou aquelas que são especialmente significativas podem ser designadas como linhas de base. As versões check-out podem ser trabalhadas por diferentes grupos ou indivíduos como código de ramificação a partir do tronco principal. Quando as versões são check out e check in, o primeiro a fazer o check in com certeza será bem sucedido. Se outras versões são check out, alguns sistemas podem fornecer para a fusão de versões para permitir que mais alterações sejam adicionadas ao repositório central.
Another método usado no controle de versões é o branching, no qual programas em desenvolvimento são copiados para desenvolvimento em versões paralelas, mantendo o original e trabalhando no branch ou fazendo alterações diferentes para cada um. Cada cópia é considerada um branch; o programa original do qual o branch é retirado é referido como o trunk, o baseline, a linha principal ou o master.
Controle de versão é geralmente baseado em um modelo cliente-servidor. Outro método é o controle de versão distribuído, no qual todas as cópias estão em um repositório codebase e as mudanças são sincronizadas através de patches ou mudanças compartilhadas de peer para peer.
Os termos version control e versioning são às vezes usados de forma intercambiável mesmo que seus significados técnicos sejam diferentes.