Vous êtes sur la page 1sur 9

Bazaar HOWTO

Sommaire
But de ce document..............................................................................................................................4 Vocabulaire...........................................................................................................................................4 Workflow..............................................................................................................................................5 Mise en pratique...................................................................................................................................6 Commandes ...................................................................................................................................6 Exemple..........................................................................................................................................7 Bibliographie........................................................................................................................................9

But de ce document
Bazaar est un outil puissant mais pas toujours trs intuitif. Ceci est un document de rfrence destin aux dveloppeurs concernant l'utilisation de bazaar au sein du projet Ispees. Il couvre la fois l'aspect WorkFlow ( l'utilisation qui est faite de bazaar dans le projet ) et la mise en pratique.

Vocabulaire
Avant de commencer un peu de vocabulaire est ncssaire :

Rvision : Une rvision est un instantan de l'tat d'une arborescence de fichiers et de rpertoires, y compris leur contenu et la forme. Une rvision a aussi des mtadonnes qui lui sont associs, notamment:

qui a envoy la rvision quand un message expliquant les changements les rvision parentes partir desquelles celle ci t produite

Les rvisions sont immuables et peuvent tre identifis par un id unique.

Rpertoire de travail (Working Tree) : Un rpertoire de travail est une rpertoire contrl par bazaar contenant des fichiers que l'utilisateur peut diter. Un rpertoire de travail est associ une branche. Beaucoup de commandes utilisent le rpertoire comme leur contexte, par exemple, commit cre une nouvelle rvision en utilisant le contenu courant du rpertoire. Branche : Dans le cas le plus simple, une branche est une srie ordonne de rvisions. Les branches peuvent tre spares puis fusionnes de nouveau plus tard, formant un graphe de rvisions. Exemple tir du dveloppement de bazaar :

Chaque ligne reprsente une branche. On peut voir qu'une copie de la branche principale est faire la rvision 1543 (ligne verte) quelques modifications sont faites a la fois dans la branche principale et dans la branche drive (point gris et 2 points verts) puis la branche drive est fusionne la branche principale (rvision 1545).

Rfrentiel (Repository) : l'endroit ou sont stockes les rvisions.

Workflow
Le projet Ispees utilise un workflow dcentralis avec une branche principale commune.

Lors d'une correction de bug / criture d'une nouvelle fonctionnalit etc, les dveloppeurs font une copie de la branche principale de dveloppement, font leurs modifications (correction du bug, cration de la nouvelle fonctionnalit) sur leur branche sans toucher la branche principale, puis fusionnent leur branche la branche principale quand ils ont fini. Une branche locale peut bien entendu contenir plusieurs rvisions. L'intrt est de regrouper les modifications par thme et de garder un historique des modifications cohrent sur le projet. De plus cela permet chaque dveloppeur de se concentrer sur son travail sans tre drang par les commit des autres. Un exemple de l'intret de cette mthode. Avec un systme classique :
107: 106: 105: 104: 103: 102: 101: Add Fix Fix Add Add Add Add documentation for Y bug found in testing Y bug found in testing X code for Y documentation for X code and tests for X tests for Y

(toutes les modifications sont mlanges) devient avec un tel systme :


102: Merge 100 100 100 101: Merge 100 100 100 100 100: feature X 2 3: Fix bug found in testing X 2 2: Add documentation for X 2 1: Add code and tests for X feature Y 1 4: Add documentation for Y 1 3: Fix bug found in testing Y 1 2: Add code for Y 1 1: Add tests for Y

Beaucoup plus lisible, chaque modification tant confine dans la branche qui la concerne.

De plus, de faon garder une trace de ce que font les dveloppeurs, les branches drives seront galement envoyes sur le serveur.

Mise en pratique
Commandes
Avant toute utilisation de bazaar dans le cadre du projet il est ncessaire de se logger sur launchpad :
b!r "aunc#$ad%"ogin sebastien%debia

Premire rcupration de la branche principale :


b!r branc# "$:&is$ees'is$ees'trun(

Si les fichiers sont dj prsent en local dans le rpertoire de travail on peut galement ffecteur :
b!r $u"" branc# "$:&is$ees'is$ees'trun( b!r merge

Ce qui a pour effet de rcuprer la branche principale et de la fusionner avec la version prsente dans le rpertoire de travail local. Cette commande peut tre utilise dans le cas d'une branche drive longue qui veut reprendre la version courante de la branche de dveloppement sans perdre les modifications ffectues. Pour crer une nouvelle rvision et l'envoyer sur launchpad :
b!r commit '' )r*e "a nou+e""e r*+ision

Pour envoyer la rvision dans la branche fonctionalitee1 du projet ispees possde par le dveloppeur sebastien-debia :
b!r $us# "$:&sebastien%debia'is$ees'fonciona"itee1

Pour fusionner la branche locale dans la branche principale :


cd trun( '' r*$ertoire "oca" contenant "a branc#e $rinci$a"e '' r*cu$*ration de "a derni,re +ersion '' a$$"i-ue "es modifications aux fic#iers '' / r*so"ution des conf"its '' cr*ation de "a r*+ision a$r,s fusion '' en+oi *ffectif sur "a branc#e $rinci$a"e b!r $u"" "$:'&is$ees'is$ees'trun( b!r u$date b!r merge re$.ranc#eAFusionner b!r commit b!r $us# "$:'&is$ees'is$ees'trun(

Pour fusionner la branche principale dans la branche locale :


cd fonctiona"itee1 b!r merge b!r commit '' r*$ertoire de tra+ai" de "a branc#e '' fusion '' cr*ation de "a r*+ition a$r,s fusion

Exemple
2 dveloppeurs (A et B) travaillent sur le projet Ispees. Ils ont tous les deux une version de la branche principale sur leur disque dur dans le rpertoire :
branc#e0rinci$a"e'trun(

Le developpeur A veut travailler sur le module rules. Le developpeur B veut travailler sur le module config.

Developpeur A Il va commencer par crer une branche ddie au dveloppement du module rules. cration d'un rpertoire qui va acceuillir la nouvelle branche :
m(dir branc#e1e+2u"es cd branc#e1e+2u"es

Developpeur B Il va commencer par crer une branche ddie au dveloppement du module config. cration d'un rpertoire qui va acceuillir la nouvelle branche :
m(dir branc#e1e+)onfig cd branc#e1e+)onfig

Puis il rcupre la version actuelle de la branche Puis il rcupre la version actuelle de la branche principale : principale :
b!r branc# "$:&is$ees'is$ees'trun( b!r branc# "$:&is$ees'is$ees'trun(

Il travaille sur sa branche (dans le rpertoire brancheDevRules/trunk) Quand il veut dposer :


b!r commit

Il travaille sur sa branche (dans le rpertoire brancheDevRules/trunk) Quand il veut dposer :


b!r commit

Puis il envoie sa branche sur launchpad :


b!r $us# "$:'&sebastien% debia'is$ees'de+2u"es

Puis il envoie sa branche sur launchpad :


b!r $us# "$:'&damdum'is$ees'de+)onfig

Le dveloppeur A a termin son travail Le dveloppeur A fusionne sa branche dans la branche principale. Il revient dans le rpertoire de travail de la branche principale (branchePrincipale/trunk)
b!r $u"" 3"$:&is$ees'is$ees'trun(4 b!r u$date b!r merge ' 'branc#e1e+2u"es'trun( '' r*soudre "es conf"its *+entue"s b!r commit b!r $us#

Le dveloppeur B galement Le dveloppeur B fusionne sa branche dans la branche principale. Il revient dans le rpertoire de travail de la branche principale (branchePrincipale/trunk)
b!r $u"" 3"$:&is$ees'is$ees'trun(4 b!r u$date b!r merge ' 'branc#e1e+)onfig'trun( '' r*soudre "es conf"its *+entue"s b!r commit b!r $us#

Si un conflit apparat : le rsoudre l'aide d'un utilitaire tel que meld puis taper en ligne de commande :
b!r reso"+e "efic#ier

puis continuer (bzr commit ...) Si le dveloppeur A veut une version jour de la branche principale il doit juste faire :
cd branc#e0rinci$a"e b!r $u"" b!r u$date

Toutes ces tapes donnent quelquechose comme :

Bibliographie
Documentation de bazaar : http://doc.bazaar-vcs.org/latest/en/user-guide/index.html