Estou utilizando o Bazaar VCS a algumas semanas, tanto para avaliar sua eficácia quanto para implementar em projetos que já estou trabalhando. Na minha atuação no Projeto GNU, sempre utilizei o CVS e acostumei com sua maneira de ser. Tinha coisas que não gostava, como o fato de ser apenas cliente servidor. Em outros projetos eu resolvi adotar o Subversion (SVN) e até então era meu sistema de controle de versão favorito.
Com o fato da distribuição Ubuntu utilizar amplamente o Bazaar, fiquei bastante curioso em testá-lo e ver quais eram as principais diferenças com o SVN. Logo no início já gostei de alguns pontos, como:
- O Bazaar é todo feito em Python;
- Tem o apoio da Canonical e é utilizado pelo Ubuntu no Launchpad;
- Possui praticamente todos os recursos do SVN e CVS, só que alguns pontos são melhores;
- Pode ser utilizado no esquema cliente-servidor ou apenas localmente no seu projeto, sem precisar de servidor;
- Possui vários plugins que facilitam o trabalho e administração de código;
- É possível interagir facilmente com as libs Python e escrever suas próprias extensões;
- É possível integrar o Trac;
- Possui o Olive, um frontend gráfico para o Bazaar e fácil de mexer;
- Ao usar remotamente, é possível escolher qual protocolo de transferência, como ssh, sftp, http, ftp, http, etc;
- A maioria das distribuições já têm o pacote para o Bazaar, assim como plataformas Macintosh e Windows.
Mas também tem alguns pontos negativos, como ainda não ter suporte para a maioria dos IDEs. Eu mesmo não consegui fazer o Emacs funcionar corretamente com o Bazaar, mas confesso que não testei todos os módulos elisp que encontrei na internet.
O seu uso é bastante simples, veja:
anderson@yoda:~/tmp/teste$ touch arquivo1.txt
anderson@yoda:~/tmp/teste$ touch arquivo2.txt
anderson@yoda:~/tmp/teste$ touch arquivo3.txt
anderson@yoda:~/tmp/teste$ bzr init
anderson@yoda:~/tmp/teste$ bzr add
added arquivo1.txt
added arquivo2.txt
added arquivo3.txt
anderson@yoda:~/tmp/teste$ bzr commit -m ‘Primeiro import’
Committing to: /home/anderson/tmp/teste/
added arquivo1.txt
added arquivo2.txt
added arquivo3.txt
Committed revision 1.
Explicando: Criei um diretório (teste), dentro dele criei 3 arquivos vazios. Dentro do diretório, dei um bzr init para criar o repositório, depois adicionei todo conteúdo do diretório (bzr add) e por último, um commit para registrar como primeiro import ao sistema de controle de versões.
Dessa forma é possível trabalhar localmente com um projeto e tê-lo dentro de um sistema de controle de versões. O resto é praticamente idêntico aos outros VCS, sempre que finalizar uma alteração basta dar um commit, veja:
anderson@yoda:~/tmp/teste$ echo “Alteracao em um arquivo” >> arquivo1.txt
anderson@yoda:~/tmp/teste$ bzr status
modified:
arquivo1.txt
anderson@yoda:~/tmp/teste$ bzr diff arquivo1.txt
=== modified file ‘arquivo1.txt’
— arquivo1.txt 2008-04-24 23:05:14 +0000
+++ arquivo1.txt 2008-04-24 23:09:51 +0000
@@ -0,0 +1,1 @@
+Alteracao em um arquivo
E por último, um commit:
anderson@yoda:~/tmp/teste$ bzr commit -m “Mudancas na estrutura do arquivo1.txt”
Committing to: /home/anderson/tmp/teste/
modified arquivo1.txt
Committed revision 2.
Veja o log de alterações:
anderson@yoda:~/tmp/teste$ bzr log
————————————————————
revno: 2
committer: Christiano Anderson anderson@gnu.org
branch nick: teste
timestamp: Thu 2008-04-24 20:10:24 -0300
message:
Mudancas na estrutura do arquivo1.txt
————————————————————
revno: 1
committer: Christiano Anderson anderson@gnu.org
branch nick: teste
timestamp: Thu 2008-04-24 20:05:14 -0300
message:
Primeiro import
Se quiser colocar o conteúdo desse repositório em algum servidor para que outras pessoas trabalhem, mas utilizando o sftp, basta:
bzr push sftp://usuario@servidor/path/para/repositorio
Depois para outras pessoas fazerem o checkout:
bzr co sftp://usuario@servidor/path/para/repositorio
e a partir daí trabalhar normamente com os bzr update e bzr commit para mandar novamente para o servidor. É possível também fazer commits offline de pois fazer um merge com o branch do servidor, para isso basta um
bzr commit –local
Fica a dica! 🙂