Pular para o conteúdo principal

CVS X SVN - Características

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

Postagens mais visitadas deste blog

História do Assembly

Provavelmente a primeira linguagem de programação. O Assembly surgiu em meados da década de 50. Os computadores ainda usavam válvulas. Considerada uma grande evolução na linguagem de computação, pois se utilizou de grandes abstrações, aumentando produtividade e segurança. O Assembly substitui uma instrução em linguagem de máquina por um comando legível ao ser humano. Exemplos de instruções em Assembly: add, mul, div, and, not, or. Pondendo-se ainda, o usuário, criar variváveis e lidar com elas através dessas instruções e algumas outras existentes na linguagem Assembly. A linha de instrução "add x, y" significa dizer que estou mandando somar os valores de x e y. Esse resultado deve ser armazenado em um registrador. Registradores são áreas dentro de um processador mais rápidas que operadores de memória. São 8 registradores gerais: EAX, EDX, ECX, EBX, ESI, EBP, ESP e EDI. Programando, devemos utilizar apenas 6 destes registradores, devido a os registradores ESP e EBP serem uti...

DISTINCT x UNIQUE, existe diferença?

Não. "Utilize DISTINCT ou UNIQUE se você quiser que o Oracle retorne apenas uma cópia de cada conjunto de linhas duplicadas selecionadas (estas duas palavras-chave são sinônimos). As linhas duplicadas são aquelas com valores correspondentes para cada expressão na lista de seleção." UNIQUE é uma função do ORACLE e não funcionará em outros bancos de dados (MySQL, PostgreSQL, etc...) Fonte: Oracle9i SQL Reference Release 2

Problemas para criar cliente java de um webservice gerado no delphi

Neste post irei relatar aqui problemas que ocorreram quando tentava criar um cliente em Java de um webservice gerado no Delphi. Por algumas vezes já precisei trabalhar com Webservices, como servidor e como cliente. Sempre usando tecnologias do JAVA, algumas vezs .NET. Recentemente, precisei criar um cliente para um serviço desenvolvido em Delphi executado a partir de uma dll. Para minha surpresa tive problemas na implementação, para uma surpresa ainda maior encontrei muitos programadores na internet com este mesmo problema que será aqui relatado. Essa dificuldade e o pouco material encontrado sobre o assunto serviram de motivação para publicá-lo aqui. Problema: Comecei salvando o wsdl do serviço, como sempre faço, e através do Eclipse (IDE de desenvolvimento Java) com alguns plugins, WSDL2Java, da API do APACHE AXIS 1.3 tentei gerar o cliente e não obtive êxito. O erro apresentado era sempre esse: IWAB0399E Error in generating Java from WSDL: WSDLException (at /definitions/binding/ope...