Esta postagem tem como objetivo fornecer insumos comparativos entre duas ferramentas SCM (Software Configuration Management): CVS e SVN. Sua principal finalidade é auxiliar a tomada de decisão durante a migração ou não do SCM atual, CVS, para o SVN.
Nele juntei pontos importantes encontrados em várias referências encontradas sobre o assunto. 
Características CVS x SVN (Subversion)
O Subversion foi construído pensando em incorporar os conceitos do CVS e corrigir suas limitações.
O Subversion utiliza banco de dados Berkeley BD, permitindo operações eficientes e em com grande número de arquivos. Seu servidor pode fornecer cópias de segurança sem que seja necessário desligá-lo. O CVS utiliza um arquivo para cada arquivo versionado, fazendo com que a operação possa ser bastante lenta (lockfile lento, pesado).
Ao contrário do CVS que não permite um controle de versão dos diretórios, o SVN permite um controle de histórico da mesma forma que mantém o controle dos arquivos. Quando se deseja mover algum arquivo no CVS é necessário um corte manual para não perder o histórico, enquanto a própria ferramenta do SVN fornece funções de mover, copiar e renomear mantendo o histórico de cada uma destas ações. 
No Subversion quando um usuário faz um commit, a mudança pode ser aplicada ou revertida, ficando visível para os demais somente quando concluída (como um commit e rollback no BD), commit atômico (todos de uma vez ou revert todos). O CVS commita cada arquivo por vez até que toda operação seja concluída,  se a conexão de rede falhar durante este processo existe risco de acontecer um commit parcial ou até mesmo que o arquivo seja corrompido. Caso seja necessário reverter um commit com o CVS  é necessário baixar do histórico a versão desejada.
O mecanismo de commit atômico do Subversion mantém juntas as alterações em um grupo com uma mensagem de confirmação e um número de revisão ou alteração é atribuído. Este número pode ser utilizado para recriar o repositório a qualquer momento. No CVS, o histórico é gravado por arquivo.
Caso queira colocar um repositório na web com o Subversion você pode utilizar o Apache, protocolo HTTPS, fazendo proveito dos mecanismos de segurança do Apache.
O CVS guarda separadamente cada revisão de um arquivo, por exemplo: 10 versionamentos de um arquivo de 100k utilizará quase 1MB de espaço em disco. O Subversion utiliza um algoritmo binário para armazenar todos os arquivos e um calculo para identificar suas diferenças, ocupando assim um espaço muito menor.
SVN foi escrito em C, encontra disponível em muitas plataformas com Windows, Linux, Solares, Apple OSX e caso não exista uma versão do SVN para sua plataforma você pode baixar o código fonte e compilá-lo.
Existe uma ferramenta chamada CVS2SVN que auxilia o processo de migração entre o CVS e o SVN, mantendo todo o histórico do projeto. (Em uma próxima postagem falarei sobre o uso desta ferramenta)
Logo abaixo temos uma tabela abrangendo as características de ambos.
| Característica | CVS | Subversion | 
| Armazenamento | É criado um arquivo para cara   versionamento de arquivo. Obs.: Para corrigir possíveis falhas basta editar diretamente o arquivo. | Banco de dados (Berkeley BD). Obs.: Utiliza uma ferramenta para correção de falhas. | 
| Manipulando diretórios | Não permite. É necessário um corte manual para   não perder o histórico. | Trabalha da mesma forma que os   arquivos. Os diretórios também são versionados. Podem ser movidos, copiados e   renomeados e este histórico é mantido. | 
| Acesso concorrente | Podem ocorrer conflitos por se   tratar de acesso a arquivos no disco. | Controlado pelo banco de dados. | 
| Commit | Comita cada arquivo por vez até que   a operação seja concluída. Obs.: Caso ocorra uma falha de rede   o arquivo pode ficar parcialmente corrompido ou até mesmo inutilizado. | Commit atômico. Commita tudo ou   reverte tudo. Funciona como um commit   ou rollback do bando de dados. | 
| Velocidade de transação | Lento por se tratar de acesso e   leitura a arquivo de sistema. | Lento apenas no primeiro checkout   pois precisa fazer uma cópia de todos os arquivos pra máquina. | 
| Utilização de disco para armazenagem   de dados | Guarda cada revisão de arquivo em   um novo arquivo. Ex: 10 versionamentos de um arquivo de 100k utilizará   aproximadamente 1MB do disco. | Utiliza um calculo binário para   guardar os arquivos e um calculo diff binário para identificar suas diferenças. | 
| Interoperabilidade | Não permite. | Diversas plataformas: Windows,   Linux, Solaris, Apple OSX.  Obs.: caso não possua uma versão   para sua plataforma o código fonte pode ser baixado e compilado. | 
| Metadados | Não armazena. | Permite versionamento. | 
| Arquivos comportados | Texto, problemas com binários. | Todos os tipos de arquivos. | 
| Lock de arquivos | Não permite. | Permite. Ao bloquear um arquivo ele   passa a ficar como somente leitura para os demais usuários. | 
| Versionamento | Versiona arquivo por arquivo.   Permite a criação de branchs e tags por arquivo.  Obs.: Não permite restaurar a versão do projeto à partir de   uma tag específica. | O mecanismo de commit atômico do Subversion mantém juntas as alterações   em um grupo com uma mensagem de confirmação e um número de revisão ou   alteração é atribuído. Obs.: Permite restaurar a versão do projeto à partir de uma   tag específica. | 
Principal referência para construção deste documento: 
Demais referências:
Comentários