Software de Controle de Versão
Nesta página, você encontrará informações úteis sobre software de controle de versão. Conheça as vantagens e desvantagens das ferramentas mais utilizadas.
O que é software de controle de versão?
Software de controle de versão (VCS) é uma ferramenta que registra as alterações em um conjunto de arquivos ao longo do tempo, permitindo recuperar qualquer versão anterior, ver quem alterou o quê e combinar o trabalho de várias pessoas sem sobrescrever o trabalho umas das outras. É a espinha dorsal de qualquer fluxo de trabalho colaborativo de software e se torna essencial no momento em que mais de uma pessoa trabalha em uma base de código.
Esta página explica as duas famílias de software de controle de versão, apresenta as ferramentas mais conhecidas e seus trade-offs, e ajuda você a decidir qual delas se encaixa no seu projeto. Se quiser entender o conceito subjacente primeiro, leia Sistema de Controle de Versão; para ver por que o Git em particular venceu, veja O que é Git.
Centralizado vs. distribuído
Quase todo VCS se enquadra em uma de duas arquiteturas, e a diferença molda tudo o mais.
- Centralizado (CVCS): um único servidor armazena o histórico canônico. Os clientes fazem checkout de uma cópia de trabalho e fazem commit diretamente nesse servidor. Exemplos: CVS, SVN. A vantagem é ter uma fonte de verdade óbvia e controle de acesso simples; a desvantagem é que você precisa de acesso à rede para fazer commit, e o servidor é um ponto único de falha.
- Distribuído (DVCS): cada clone é uma cópia completa de todo o repositório, incluindo todo o histórico. Você faz commit, cria branches e visualiza o histórico localmente e offline, sincronizando com outros quando estiver pronto. Exemplos: Git, Mercurial, Monotone. Isso torna a maioria das operações instantânea e elimina o ponto único de falha, ao custo de um modelo mental ligeiramente mais complexo.
O design distribuído do Git é a principal razão pela qual criar branches e fazer commits parece instantâneo — não há ida e volta ao servidor. Cada clone feito com git clone já contém o histórico completo do projeto.
Ferramentas amplamente utilizadas
Git
Git é o sistema de controle de versão distribuído padrão de fato atualmente. É rápido, eficiente e lida com projetos de qualquer tamanho. Seus pontos fortes distintivos são branches locais baratos (veja git branch), uma área de staging conveniente (veja git add) e suporte a muitos fluxos de trabalho. É um software livre e de código aberto.

Limitações. O suporte a arquivos binários grandes é fraco por padrão — embora o Git LFS resolva isso. As operações podem ficar lentas em repositórios muito grandes com históricos longos, e a amplitude de comandos pode parecer avassaladora para iniciantes.
CVS
CVS (Concurrent Versions System) é um sistema centralizado que foi historicamente popular, mas agora está em grande parte obsoleto, superado por ferramentas distribuídas modernas. Ele registra o histórico de arquivos e documentos e funciona em quase todas as plataformas de hardware e sistemas operacionais. É um software livre e de código aberto.

Limitações. O CVS não verifica a integridade do repositório e carece de commits atômicos, rastreamento de merges e revisões assinadas — falhas que motivaram diretamente seus sucessores.
SVN
SVN (Apache Subversion) é um sistema de controle de versão centralizado amplamente utilizado durante os anos 2000 e ainda encontrado em alguns ambientes corporativos e legados. Seus recursos incluem diretórios versionados, commits atômicos, rastreamento de merges, operações de cópia/mover/renomear/excluir de primeira classe, um modelo cliente-servidor, metadados versionados de forma livre, suporte completo a MIME e bloqueio de arquivos. É um software livre e de código aberto.

Limitações. Os horários de modificação de arquivos não são armazenados, a normalização de nomes de arquivos pode ser problemática entre plataformas e não há suporte para revisões assinadas.
Mercurial
Mercurial é um sistema de controle de versão distribuído escrito principalmente em Python. É rápido, suporta projetos de qualquer tamanho e tem uma interface reconhecidamente previsível e fácil de aprender. Funciona em sistemas Unix, Windows e macOS, lida bem com arquivos binários e tem forte suporte a merges e branches. É um software livre e de código aberto.

Limitações. Python é necessário para todos os complementos, checkouts parciais não são suportados e ele nem sempre lida bem com extensões de terceiros.
Monotone
Monotone é um sistema de controle de versão distribuído escrito em C++. É um VCS transacional de arquivo único que oferece operação totalmente desconectada, merges sensíveis ao histórico, branches leves, manutenção mínima e sincronização peer-to-peer. Funciona em Linux, Solaris, macOS, Windows e outros sistemas Unix. É um software livre e de código aberto.

Limitações. Sem suporte a HTTP, os usuários não podem fazer checkout ou commit de trás de um proxy, e algumas operações — principalmente o pull inicial — têm problemas de desempenho. O Monotone está em grande parte abandonado hoje e tem relevância moderna limitada.
Comparação rápida
| Ferramenta | Arquitetura | Status | Ponto forte notável | Principal fraqueza |
|---|---|---|---|---|
| Git | Distribuído | Padrão da indústria | Velocidade, branches, ecossistema | Binários grandes, curva de aprendizado |
| Mercurial | Distribuído | Mantido, nicho | Interface previsível e simples | Ecossistema menor |
| SVN | Centralizado | Legado / corporativo | Bloqueio de arquivos, modelo simples | Precisa de servidor para commit |
| CVS | Centralizado | Obsoleto | Importância histórica | Sem commits atômicos ou verificações de integridade |
| Monotone | Distribuído | Amplamente abandonado | Forte modelo de integridade | Sem HTTP, pull inicial lento |
Qual você deve escolher?
Para quase todo novo projeto, a resposta é Git: tem a maior comunidade, o melhor suporte de hospedagem (GitHub, GitLab, Bitbucket) e as ferramentas mais completas. Opte por uma alternativa apenas quando uma restrição concreta o levar a isso:
- Mercurial — se sua equipe preferir um conjunto de comandos menor e mais consistente e você não estiver vinculado ao ecossistema Git.
- SVN — se você precisar de bloqueio estrito de arquivos para ativos binários não mescláveis, ou se mantiver um fluxo de trabalho centralizado existente.
- CVS / Monotone — geralmente apenas para manter um repositório legado existente; evite para novos projetos.
Depois de optar pelo Git, o próximo passo é instalá-lo e aprender como o gerenciamento de código-fonte funciona na prática.