CVS vs Git

Fonte: Wikiversidade

Breve explicação sobre as ferramentas[editar | editar código-fonte]

CVS

CVS é um acronimo para Concurrent Versions System (Sistema de Versões Concorrentes). É um sistema de controle de versões OpenSource e Multiplataforma.  É um software de versionamento de código o qual utiliza uma arquitetura de Cliente-Servidor para armazenar as versões do projeto atual. Através da conexão ao servidor é possível obter uma cópia do projeto para realizar suas próprias alterações. Para cada alteração feita é criada um log indicando as modificações. Atualmente o CVS está ativo, entretanto sem novas funcionalidades.

CVS por ser um sistema centralizado, precisa de um servidor central ao qual os desenvolvedores precisam sincronizar-se para realizar as suas alterações e não é possível dar "checkouts" reservados. Também possui limitações para realizar commits mais frequentes. No geral funcionalidades inteiras são implementadas em um único commit.

A seguir são apresentados alguns dos conceitos básicos a respeito do CVS:

  • Repositório:

Lugar onde ficam guardados os arquivos sob controle do CVS que compõem os diversos módulos. Um repositório pode ser local (armazenado na própria estação de trabalho) ou em um servidor remoto.

  • Modulo:

Consiste em um conjunto de arquivos agrupados em pastas dentro de um repositório. Separação lógica dos arquivos de diferentes projetos, sob um mesmo repositório. Normalmente um por projeto ou sistema.

  • Área de trabalho:

Local aonde se mantem os arquivos de um determinado módulo para que possam ser modificados.

Principais comandos do CVS:

  • Checkout;
  • Commit;
  • Update;
  • Merge;
  • Diff;
  • Release;
  • Import;
  • Export;
  • Add;
  • Rem;
  • Status;
  • Tag;
  • Branch.

Git

É um software de versionamento de código o qual também usa uma arquitetura de cliente-servidor para armazenar versões do projeto. Diferente do CVS o git funciona sem um servidor central, permitindo aos desenvolvedores terem seus próprios repositórios enquanto há um repositório público o qual podem ser enviadas as alterações.

Sendo um sistema de controle de versão descentralizado commits podem ser feitos mais frequentemente, permitindo a implementação de funcionalidades através de diversos commits.

Instalação do CVS no Linux pelo terminal[editar | editar código-fonte]

1º passo

$ sudo apt-get install cvs 

Para mais informações de configuração acesse CVS

Instalação do Git no Ubuntu[editar | editar código-fonte]

1º Passo

$ sudo apt-get install git

Roteiro demonstrativo para uso em uma aplicação simples[editar | editar código-fonte]

No exemplo será suposto que se queira versionar todo o conteúdo existente no diretório Documents no linux Mint. Primeiramente deve se criar um repositório vazio. O nome do usuário é Kleber e o diretório sera criado com nome CVS. Digite o seguinte comando:

$ mkdir /home/kleber/Documents/CVS		

Será necessário redefinir a variável de ambiente CVSROOT para apontar para este diretório:

$ export CVSROOT=/home/kleber/Documents/CVS

Inicialize o repositório para dessa forma instruir o CVS a criar um conjunto de arquivos de administração, para que se possa adicionar módulos em seguida:

$ cvs init

Após este comando, o CVS criará um diretório chamado CVSROOT contendo os arquivos de que necessita para gerenciar o repositório (arquivos administrativos). O repositório já se encontra em condições de criar módulos e importar os respectivos arquivos.

Para criar um módulo no repositório, basta importar os arquivos desejados a partir do diretório raiz do projeto. Diretório raiz de um projeto é o diretório que contém todos os arquivos de um determinado projeto.

Criar o módulo versionamento importando os arquivos:

$ cvs import versionamento autor inicio

Sintaxe do comando:

$ cvs import módulo vendor_tag release_tag

  • módulo indica o módulo que deve ser criado no repositório, se este ainda não existir.
  • vendor_tag geralmente indica o distribuidor ou autor do projeto.
  • release_tag indica o marcador que deve ser usado durante a importação dos arquivos.

Para modificar os arquivos de um módulo, devemos antes fazer uma cópia (checkout) do mesmo para a área de trabalho. No exemplo, o diretório ~/Desktop foi criado no diretorio Documents e escolhido como área de trabalho, a cópia do módulo será feita lá.

$ cd ~/Desktop
$ cvs checkout versionamento

Para evitar que possíveis alterações sejam desfeitas, é importante atualizar os arquivos da área de trabalho antes de enviar as alterações para o repositório:

$ cvs update

Quando se quer adicionar um arquivo a um módulo, é necessário adicioná-lo explicitamente, pois o CVS não adiciona ou remove arquivos automaticamente:

$ cvs add nomeArquivo

Realizadas as modificações necessárias, o próximo passo é enviá-las para o repositório com o seguinte comando:

$ cvs commit -m “Incluído arquivo que faltava” nomeArquivo

Significado dos Códigos de Saída[editar | editar código-fonte]

  • U – mais comum, indica que o CVS atualizou (ou criou) um arquivo com

uma cópia completa do repositório;

  • P – indica que o CVS atualizou um arquivo usando patch, ou seja, enviou

apenas as diferenças do repositório

  • M – indica que o CVS detectou uma alteração na cópia local em relação

ao repositório

  • C – indica que o CVS encontrou um conflito ao tentar mesclar as

atualizações do repositório com a cópia local

  • R – arquivo local removido por não fazer mais parte do repositório
  • N – arquivo local adicionado ao repositório
  • ? - arquivo local que não foi encontrado no repositório, e, portanto, será ignorado

Comparação de comandos CVS vs Git[editar | editar código-fonte]

Alguns comandos Básicos CVS[editar | editar código-fonte]

Iniciar um repositório.

$ cvs -d repository_root_directory init 

Criar novas branches Para criar novas branches em CVS deve-se primeiro ir ao diretório, ou parte do código que deseja, e comandar:

cvs tag branch_que_deseja_copiar
cvs tag branch_que_deseja_copiar -b nova_branch 

Para criar uma cópia do código nessa nova branch

$ cvs update -r nova_branch

Para ver a ajuda de um determinado comando:

$ cvs --help update

O manual online do CVS possui bastante informação, com a vantagem de ter descrições mais longas (e úteis):

$ man cvs

Para mostrar o log de alterações entre um determinado par de revisões (numéricas, não simbólicas)

$ cvs log -r 0.2.0.2:0.3.0.2 nomeArquivo

Para exibir o status de um ou mais arquivos:

$ cvs status nomeArquivo

Para criar uma ramificação de um módulo retirado, usa-se o parâmetro -b (de branch) no comando CVS tag :

$ cvs tag -b nomeBranch

Unindo as ramificações

$ cvs checkout -j nomeBranch nomeModulo

Commitando

$ cvs commit -f arquivo

Merge Pode-se utilizar os comandos co ou update seguidos de -j para fazer o merge das alterações da nova_branch para a branch principal.

$ cvs co -j nova_branch meu_arquivo

Ou

cvs update -j nova_branch meu_arquivo

Comandos Básicos Git[editar | editar código-fonte]

Iniciar um repositório.

Vá no diretório que deseja iniciar um novo repositório e digite

git init

Criar uma cópia do repositório

git clone [url]

Atualizar o repositório local de acordo com o repositório remoto

git pull branch_atualizada

Ver log de commits da branch atual

git log

Verificar o status dos arquivos

git status

Criar novas branchs

git checkout -d nova_branch

Merge Você deve ir para a branch que deseja incluir as alterações.

Por exemplo, uma branch feature1 contém alterações que podem ser incluídas na master.

git checkout master
git merge feature1

Git vs CVS[editar | editar código-fonte]

Armazenamento de dados

O CVS armazena informações como uma lista de mudança de arquivos. Enquanto o Git mantem um Snapshot, isso significa que o git salva o estado atual do projeto e armazena uma referência para essa captura.

Operações

A maior parte das operações em Git utilizam apenas de recursos locais, tornando assim o trabalho mais rápido, pois não há necessidade de uma rede ou computador para versionar seu projeto.

  • Git não necessita acesso ao servidor para ter acesso ao histórico projeto.
  • Git pode mostrar as diferenças num arquivo de modo local
  • Caso não haja internet ou acesso ao servidor, ainda é possível trabalhar de maneira offline.

Gitignore

  • Git possui uma ferramenta para ignorar automaticamente arquivos. Você pode adicionar as extensões ou arquivos que deseja ignorar no arquivo .gitignore.
cat .gitignore
*.[oa] #Ignorar qualquer arquivo que terminar em .o ou .a
*~ #ignorar qualquer arquivo que terminar com ~

Branching

  • Operações de branching em CVS são penosas pois exigem que o repositório seja marcado em um determinado ponto, para que a branch seja criada e então o processo de desenvolvimento pode ser iniciado.
cvs tag nova_branch
cvs tag -b -r nova_branch 
cvs up -r nova_branch

Processo tal que não é projetado para o uso de longo prazo das branches.

Enquanto no Git:

git checkout -b nova_branch

Fazendo o merge da nova_branch com a master

  • CVS
#Faça uma tag no fim da sua branch
cvs tag merge_nova_branch

#Volte para o HEAD
cvs up -A

#Faça o merge 
cvs up -j nova_branch
  • Git
#Mude para a branch master
git checkout master

#Faça o merge
git merge nova_branch

Git blame e CVS Annotate Ambos, git e CVS, possuem uma ferramenta para mostrar o registro de modificações em um arquivo.

  • Git
 git blame [arquivo]

Para mais informações visite Git Debugging: blame e bisect

  • CVS
cvs anotate [arquivo]

Apesar de existir esse comando em ambos os softwares, o git oferece melhor uso ao permitir a escolha de linhas para ser analisado entre outros comandos úteis.


Comandos avançados em Git que não possuem similares em CVS

  • CherryPick

acesse Comando Cherry-Picking para mais informações

  • Git bisect

acesse Git Debugging: blame e bisect

  • Git checkout [arquivo]
Desfazer as ultimas alterações no arquivo em espefícico.