CVS
Foi um dos primeiros sistemas de controle de versão a ter fluxos alternativos de desenvolvimento e a permitir livre edição de arquivos somente-texto entre várias pessoas de um mesmo time ao mesmo tempo. A ideia de um repositório dentro das normas do cvs é no esquema de árvore, compreendendo um fluxo principal de desenvolvimento (chamado de trunk
, ou tronco em português), fluxos alternativos de desenvolvimento (chamados de branches
, ou galhos), em que são implementadas mudanças em separado do fluxo principal, e tags
(etiquetas, que são revisões dos outros dois fluxos que não podem mais ser alteradas, ideais para indicar versões estáveis).
Possui os seguintes comandos:
- Checkout: normalmente é usado para denominar o primeiro download de um módulo inteiro a partir do repositório CVS.
- Commit: envio das modificações feitas pelo usuário ao repositório CVS.
- Export: é o download de um módulo inteiro a partir de um repositório CVS, sem os arquivos administrativos CVS. Módulos exportados não ficam sob controle do CVS.
- Import: geralmente é usado para designar a criação de um módulo inteiro dentro de um repositório CVS através do upload de uma estrutura de diretórios.
- Update: atualização da cópia local do trabalho através do download das modificações feitas por outros usuários no repositório.
- Merge: é a fusão de modificações feitas por diferentes usuários na cópia local de um mesmo arquivo. Sempre que alguém altera o código, é necessário realizar um update antes do commit, de modo que seja feito o merge — ou a fusão — das mudanças.
Utiliza uma arquitetura cliente-servidor em que todo o código é centralizado. Ideal para desenvolvimento linear, cujos projetos estejam em fase de manutenção ou pequenos melhoramentos.
SVN
É a evolução do modelo do cvs que resolve bem várias limitações do CVS, como a introdução dos comandos Rename e Move, que não apenas renomeia/move o arquivo como mantém seu histórico de alterações, o comando Commit
(de envio de arquivos) ser verdadeiramente atômico, suportando rollbacks em caso de falhas e versionamento de arquivos não suportados pelo cvs, como links simbólicos.
Possui todos os comandos do cvs e mais alguns:
- Rename
- Move
Possui também capacidade de guardar metadados dos arquivos e diretórios (extensões ignoradas, histórico de merges, etc.).
Git
É um controle de versão bastante diferente do cvs e svn, pois o modelo de versionamento é descentralizado (não há exatamente um fluxo central, e quando ele existe, não deve ser alterado, recebendo apenas merges de outros fluxos de desenvolvimento) e o envio de arquivos é em duas fases:
- Commit, fase em que as alterações são armazenadas apenas localmente;
- Push, fase em que as alterações são enviadas para um servidor que concentra todos os conjuntos de alterações (chamados de changesets) que podem ser recombinados entre si livremente.
Como o git não é um servidor de arquitetura linear, é ideal para projetos em início de desenvolvimento em que conflitos são comuns e funcionalidades são desenvolvidas em separado. O processo de merge é o mais completo e tolerante dentre os três.