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.