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

Cursos Gratuitos Udemy

Aproveitem para acumular conhecimento! Cursos pagos que estão de graça na Udemy: Python:  https://lnkd.in/epdtT8Y Ionic 3:  https://lnkd.in/e8mdY4V HTML5:  https://lnkd.in/eRZVUSN Android:  https://lnkd.in/eHg7kbz C++:  https://lnkd.in/eZvb4rV Python:  https://lnkd.in/ekavMui C e C++:  https://lnkd.in/eKUJ97p Unity 5:  https://lnkd.in/e-ftZCJ Unreal Engine 4:  https://lnkd.in/ekzWpBg Web com Github pages:  https://lnkd.in/eNfr_eS Git:  https://lnkd.in/er4im7H WordPress:  https://lnkd.in/eYExqay Jekyll:  https://lnkd.in/e4m5Q7q WordPress:  https://lnkd.in/eMffdp2 React.js:  https://lnkd.in/eE67yas Unity3D:  https://lnkd.in/ecM63B6 HTML:  https://lnkd.in/eAQFGqy C++:  https://lnkd.in/evqDkeM Algoritmos e lógica:  https://lnkd.in/ehuYnvN JavaScript:  https://lnkd.in/e9EppKs Qlikview:  https://lnkd.in/e5ZufxV Algoritmos e lógica:  https://lnkd.in/e_E3Dry Python:  https://lnkd.in/ejTKa3W Introdução à programação de computadores:  https://goo.gl/Mi3hbF Terminal L

SOA - Service Oriented Architecture (Arquitetura Orientada a Serviços)

O SOA representa uma nova geração da plataforma da computação distribuída. SOA é uma filosofia de TI que visa facilitar a integração entre sistemas, orientando a criação e a disponibilização de soluções modulares e fracamente acopladas baseadas no conceito de serviços. É um estilo de arquitetura de software cujo princípio fundamental prega as funcionalidades implementadas pelas aplicações devem ser disponibilizadas na forma de serviços. Freqüentemente estes serviços são conectados através de um “barramento de serviços” que disponibiliza interfaces, ou contratos, acessíveis através de Web Service ou outra forma de comunicação entre aplicações. ::benefícios... Facilidade de criar/controlar processos, diminuição de redundâncias (em todos os níveis), aumento da capacidade de expandir operações.  Muitos são as vantagens de se implementar SOA, abaixo descrevemos alguns: ::onde atuar... Dificuldade de comunicação entre aplicações, dificulda