O software de controle de versão, também conhecido como sistemas de controle de revisão ou controle de fonte, é usado para rastrear mudanças em projetos de desenvolvimento de software e permitir que membros da equipe alterem e colaborem nos mesmos arquivos. O software de controle de versão permite que os desenvolvedores trabalhem simultaneamente no código e isolem seu próprio trabalho através do que são conhecidos como branches. Branches mantêm as alterações de código protegidas das mudanças em outros branches, mas podem ser mescladas quando o desenvolvedor estiver pronto. Os sistemas de controle de versão permitem que os desenvolvedores rastreiem automaticamente seu trabalho, vejam um histórico de todas as mudanças e revertam para versões anteriores de um projeto quando necessário. Todas as alterações de código e branches são mantidas em um repositório (frequentemente referido como o "repo").
Os sistemas de controle de versão são usados por equipes de desenvolvimento de software para agilizar o processo de desenvolvimento, gerenciar código para múltiplos projetos e manter um histórico de alterações de código. Ao escolher um software de controle de versão, os usuários frequentemente precisam de uma solução de hospedagem de controle de versão para hospedar seu repositório mestre onde os desenvolvedores fazem commit de suas alterações de código. Os desenvolvedores frequentemente usam clientes de controle de versão para gerenciar a funcionalidade de seus sistemas de controle de versão através de uma interface gráfica de usuário (GUI). Os sistemas de controle de versão integram-se com uma variedade de ferramentas de desenvolvimento de software, incluindo IDE, software de automação de build e provedores de PaaS.
Para se qualificar para inclusão na categoria de Software de Controle de Versão, um produto deve:
Fornecer um mecanismo para os desenvolvedores acompanharem as alterações de código
Permitir que os desenvolvedores vejam um histórico de alterações
Permitir que os desenvolvedores trabalhem nos mesmos arquivos de código ao mesmo tempo
Permitir que os desenvolvedores isolem seu código através de branching
Mesclar código de diferentes branches sob comando
Mostrar aos desenvolvedores conflitos em mesclagens de código e permitir que os desenvolvedores os resolvam
Permitir que os desenvolvedores revertam suas alterações para um estado anterior