CVS X SVN - Características
Autor: rbamartins | Publicado: 2011-07-21T23:42:00-03:00

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.&nbsp;
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,&nbsp; 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 &nbsp;é 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. &nbsp;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: - http://osdir.com/Article203.phtml
Demais referências:- http://martinfowler.com/bliki/VcsSurvey.html- http://www.guj.com.br- http://portalengenhariadesoftware.blogspot.com/2010/07/cvs-x-subversion.html