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