Professional Documents
Culture Documents
The contents of this document are licensed under the Creative Commons - Attribution / Share Alike license.
See http://creativecommons.org/licenses/by-sa/2.0/
Controle de versão com Bazaar
Sumário
1 Abrindo o Bazaar 3
4 Conclusão 10
Supondo que esta seja a estrutura inicial criada pelo desenvolvedor, ele pode colocá-la no controle de
versão do bazar após criar um repositório novo, adicionar arquivos e salvar as modificações (commit).
Estes passos estão detalhados a seguir.
3 http://bazaar-vcs.org/Download.
4 http://bazaar-vcs.org/Documentation
O comando status irá indicar a condição atual do repositório, evidenciando que não existe nenhum
arquivo ou diretório sob controle:
barros@dexter$ bzr status
unknown :
Makefile
thedoc
thesource
Com o comando add é possı́vel fazer a adição recursiva dos arquivos que estão dentro do diretório
goto, conforme indicado a seguir:
barros@dexter$ bzr add
added Makefile
added thedoc
added thesource
added thedoc / newbie . txt
added thesource / luke . c
Para finalização da adição, as operações tem que ser efetivadas no repositório através do comando
commit. Além disso, é necessário adicionar uma mensagem (opção -m) para documentar a alteração.
Este é um processo comum que acontece também quando um arquivo é modificado, como veremos
mais adiante. É importante acostumar-se a colocar boas mensagens descrevendo as alterações, para
documentar o projeto e facilitar qualquer recuperação de histórico. O commit e sua saı́da estão no passo
seguinte:
barros@dexter$ bzr commit -m " Versao inicial "
added Makefile
added thedoc
added thedoc / newbie . txt
added thesource
added thesource / luke . c
Committed revision 1.
Finalmente, pode-se ver o histórico de alterações através do comando log. Neste momento do desen-
volvimento, apenas o último commit está representado no histórico, indicado pela revisão 1. A cada novo
commit o número de revisão será incrementado. É através deste número que versões antigas poderão ser
recuperadas.
barros@dexter$ bzr log
------------------------------------------------------------
revno : 1
committer : Marcelo Barros de Almeida < barros@dexter >
branch nick : goto
timestamp : Sat 2006 -11 -18 19:44:33 -0200
message :
Versao inicial
Uma observação a ser feita é que o comando add adicionar apenas arquivos texto. Arquivos binários
devem ser adicionados explicitamente. Em geral, recomenda-se que eles não sejam mantidos sob controle,
já que acabam consumindo muito espaço e tomando mais tempo de processamento. Apenas quando
estritamente necessário adicione arquivos binários ao seu repositório.
Compile o projeto dando o comando make no diretório onde está o makefile. Um arquivo executável
luke será gerado. Ao verificar o status do repositório, o Bazaar irá indicar que existem dois arquivos
modificados e dois novos:
barros@dexter$ bzr status
modified :
Makefile
thesource / luke . c
unknown :
luke
thesource / yoda . h
Caso deseje, neste ponto do desenvolvimento, enviar para o repositório as mudanças atuais, adicione
os arquivos novos e faça um commit das alterações. A operação de commit pode ser feita arquivo por
arquivo, quando se deseja ter mensagens personalizadas por arquivo alterado ou em grupo, quando isto
não é necessário. Para simplificar, iremos fazer commit em grupo. Assim, cada nova revisão irá indicar
uma revisão de todo o projeto e não de apenas um arquivo. Manter registro de alterações em arquivos
do tipo ChangeLog é uma boa prática também. O executável gerado não será mantido em controle de
versão.
barros@dexter$ rm luke
barros@dexter$ bzr add thesource / yoda . h
added thesource / yoda . h
barros@dexter$ bzr commit -m " Adicionando definicoes de Yoda "
modified Makefile
modified thesource / luke . c
added thesource / yoda . h
Committed revision 2.
Finalmente, seria interessante criar um diretório e colocá-lo em controle também. Suponha que o
diretório bin seja usado como o local de armazenamento do executável luke. Os passos envolvidos na
criação e controle estão a seguir, inclusive a modificação do makefile.
Parte do ciclo de desenvolvimento irá então seguir esta lógica de operação, com arquivos sendo adi-
cionados, removidos ou editados, com a posterior efetivação das mudanças através do commit. Cabe
ao desenvolvedor definir o melhor momento para que o este commit seja feito. Em geral, ele irá indi-
car momentos importantes no projeto, que serão marcados através da revisão gerada, permitindo uma
recuperação posterior. Um erro bastante comum é achar que o commit é uma espécie de backup. Por
exemplo, que o desenvolvedor deva usá-lo para salvar alterações ao final de um dia de trabalho ou a cada
modificação no código. Fique atento e crie revisões com parcimônia e bom senso.
Sempre é usada a última revisão no processo de ramificação, a menos que uma outra seja especifica
através da opção -r NUM REVIS~AO. Como pode ser visto, o diretório darkside tem uma estrutura idêntica
ao ramo original. As alterações no ramo darkside estão a seguir, todas executadas através do comando
echo para permitir uma reprodução sem erros dos resultados.
barros@dexter$ cd darkside
barros@dexter$ echo -e " int darth ( void ); " > thesource / sith . h
barros@dexter$ echo -e " # include \" sith . h \" " > thesource / vader . c
barros@dexter$ echo -e " int darth ( void )\ n {\ n \ treturn 1;\ n } " >> thesource / vader . c
barros@dexter$ echo -e " # include \" sith . h \" " > thesource / luke . c
barros@dexter$ echo -e " # include \" yoda . h \" " >> thesource / luke . c
barros@dexter$ echo -e " int main ( void )\ n {\ n \ treturn darth ();\ n } " >> thesource / luke . c
barros@dexter$ echo -e " all :\ n \ tgcc -c thesource / vader . c -o bin / vader . o " > Makefile
barros@dexter$ echo -e " \ tgcc thesource / luke . c -o bin / luke bin / vader . o " >> Makefile
Antes de efetivar as alterações, é interessante introduzir o comando diff, que permite visualizar as
alterações realizadas em um arquivo em relação a uma revisão qualquer. Como exemplo, considere o
arquivo thesource/luke.c.
barros@dexter$ bzr diff thesource / luke . c
=== modified file ’ thesource / luke . c ’
--- thesource / luke . c 2006 -11 -18 21:51:24 +0000
+++ thesource / luke . c 2006 -11 -19 13:31:31 +0000
@@ -1 ,5 +1 ,6 @@
+#i n c l u d e ” s i t h . h ”
#i n c l u d e ” yoda . h ”
int main ( void )
{
- return 0;
+ return darth ();
}
É possı́vel perceber que a data e o conteúdo do arquivo foram alterados. As linhas adicionadas ou
removidas são indicadas pelos caracteres (+) e (-), respectivamente. Com relação à data, é importante
notar que o arquivo foi recriado com o comando echo. Em geral, é preferı́vel que o arquivo seja apenas
editado. A mudança na data pode gerar problemas com programas como CVS. Caso a revisão não seja
especificada com a opção -r NUM REVIS~ AO, a última revisão é usada.
Efetivando as alterações no ramo:
barros@dexter$ rm bin /*
barros@dexter$ bzr add thesource / sith . h
added thesource / sith . h
barros@dexter$ bzr add thesource / vader . c
added thesource / vader . c
barros@dexter$ bzr commit -m " Adicionando o lado negro "
modified Makefile
modified thesource / luke . c
Neste caso, como o ramo goto não sofreu nenhuma alteração enquanto novas caracterı́sticas eram
adicionadas no ramo darkside, todo o processo de merge é bastante facilitado.