CVS vs Git
Breve explicação sobre as ferramentas
editarCVS
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
editar1º passo
$ sudo apt-get install cvs
Para mais informações de configuração acesse CVS
Instalação do Git no Ubuntu
editar1º Passo
$ sudo apt-get install git
Roteiro demonstrativo para uso em uma aplicação simples
editarNo 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- 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
editarAlguns comandos Básicos CVS
editarIniciar 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
editarIniciar 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
editarArmazenamento 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.