W3docs

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.

Git

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.

CVS

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.

SVN

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.

Mercurial

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.

Monotone

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

FerramentaArquiteturaStatusPonto forte notávelPrincipal fraqueza
GitDistribuídoPadrão da indústriaVelocidade, branches, ecossistemaBinários grandes, curva de aprendizado
MercurialDistribuídoMantido, nichoInterface previsível e simplesEcossistema menor
SVNCentralizadoLegado / corporativoBloqueio de arquivos, modelo simplesPrecisa de servidor para commit
CVSCentralizadoObsoletoImportância históricaSem commits atômicos ou verificações de integridade
MonotoneDistribuídoAmplamente abandonadoForte modelo de integridadeSem 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.

Prática

Prática
Qual das seguintes opções não é uma funcionalidade do Git como Software de Controle de Versão?
Qual das seguintes opções não é uma funcionalidade do Git como Software de Controle de Versão?
Was this page helpful?