Carnet Web de Bastien Jaillot

Utilisation de bazaar par l'exemple, mise en place d'un répertoire partagé de travail sur Code Igniter

Note publiée le .

Bazaar est un gestionnaire de version, un VCS en anglais : Version Control System.

Si jamais vous ignorez ce qu'est un gestionnaire de version je ne peux que vous conseiller de vous renseigner sur ce qu'est un gestionnaire de version (la définition sur Wikipedia). Si vous développez souvent et que vous n'en utilisez pas, je vous recommande de lire cet article.

Il existe beaucoup de VCS concurrents de Bazaar : mercurial, CVS, SVN. Le plus connu est certainement svn, je l'utilise moi-même beaucoup car il est très utilisé sur les divers projets auxquels je participe. Je privilégie le 3/4 du temps bazaar, mais ce n'est pas toujours moi qui initie les projets donc...

Bazaar est très à la mode en ce moment car il est très utilisé dans le monde ubuntero. Il est même intégré au célèbre Launchpad. Parmi les nombreuses super fonctionnalités, celles que j'apprécie particulièrement sont :

Il est donc très bien intégré à Ubuntu et est très simple à installer :

sudo aptitude install bzr

Si jamais vous voulez une interface graphique pour vous en servir, il existe une interface GTK :

sudo aptitude install bzr-gtk

Mon projet

J'ai sous le coude au moins un projet à développer à l'aide du framework PHP Code Igniter. Ce projet va être développé à plusieurs, pour l'instant nous sommes deux et d'ici moins d'une semaine nous serons trois. Il est impossible de coder quelque chose à plusieurs sans gestionnaire de version.

Le deuxième avantage cité tout à l'heure est sympa dans ce cas présent étant donné que toutes les personnes qui vont travailler sur le projet n'ont pas tout le temps accès au serveur de l'entreprise.

je rappelle mon précédent article sur Code Igniter qui vous expliquait comment je hiérarchise mes répertoires. Le projet présenté ici est de rentre mon installation de Code Igniter versionnable.

J'ai donc un dossier nommé codeigniter à la racine de mon répertoire personnel dans lequel on trouve :

* application-test-1
* application-test-2
* bambooinvoice.
* projet-a-realiser
* ci_default_application
* ci_system
* ci_user_guide

Je ne veux pas me répéter, mais cette configuration me permet, pour une seule copie des fichiers systèmes (ci_system), d'avoir un nombre quelconques d'applications.
Côte-à-côte nous avons donc les applications d'exemples, de tests, voir bambooinvoice (un des plus gros exemples concret de CodeIgniter). J'aime beaucoup travailler ainsi.

Mise en place de bazaar sur notre projet

Revenons dans notre dossier de tout-à-l'heure et initialisons le projet :

bzr init

Le dossier contient maintenant un dossier de plus :

* .bzr
* application-test-1
* application-test-2
* bambooinvoice.
* application-excellent-exemple
* projet-a-realiser
* ci_system
* ci_user_guide

L'initialisation de bazaar dans le dossier nous crée un dossier .bzr dans lequel on trouve tout ce qui permet de gérer les différentes versions... Pour l'instant il ne contient pas grand chose car nous n'avons pas encore validé le contenu ("commit" en anglais).

bzr status

nous indique qu'il existe un certain nombre de fichiers inconnus, ajoutons les via la commande

bzr add

puis validons les changements avec

bzr commit -m "premier versement"

Il vous sera demandé d'ajouter une explications aux changements effectués. Pour une première initialisation j'ajouterais simplement "premier versement". Vous venez de créer la première révision de votre projet.

Publier votre projet

Le dépôt est prêt. Mais plusieurs cas de figures se présentent...

  1. si vous êtes le seul à travailler dessus et que vous n'avez qu'une seule machine alors c'est bon, vous n'avez rien à faire, juste des commit de temps en temps et votre projet sera enregistré aux moments clés de leurs avancements. Si jamais vous faites de grosses erreurs vous pourrez revenir en arrière...
  2. vous avez votre base de travail sur votre ordinateur et vous désirez publiez votre travail sur une machine que nous appellerons "serveur" qui sera le point central de tous les travaux (c'est ce que propose le launchpad).

Nous allons nous attarder sur le deuxième cas, donc comment envoyer votre travail sur le serveur, comment récupérer ce qui a été modifié par les autres personnes travaillant sur le projet.

Avec la commande précédente bzr commit, vous avez créé la première révision... Plaçons la sur la machine serveur. Je suppose ici que nous allons passer par du ftp sécurisé (sftp), et que le répertoire sur lequel nous allons placer le projet est /home/bast/Codeigniter (il faut noter l'adresse absolue sinon ça ne marche pas).

bzr push sftp://<utilisateur sur le serveur>@<monserveur>/home/bast/Codeigniter

Maintenant vous pouvez travailler en local, faire vos commit de temps en temps.. Mais vous resterez en local. Quand vous voudrez publier votre travail, il faudra suivre un cycle de commande :

bzr merge
bzr commit
bzr push sftp://<utilisateur sur le serveur>@<monserveur>/home/bast/Codeigniter

Le bzr merge permet de synchroniser le travail en local et sur le serveur, le bzr commit valide les changements dus aux merge, et enfin on publie tout via bzr push.

Récupérer le projet

C'est extrêmement simple et très proche de la commande précédente pour envoyer tout sur le serveur :

bzr branch sftp://<utilisateur sur le serveur>@<monserveur><chemin absolu>

On récupère ainsi la dernière branche du serveur (dernière version du projet courant). Ensuite pour pouvoir travailler dessus et publier son travail, et bien il suffit de faire comme le point précédent, merge, commit et push.

Autre commandes utiles

bzr log

... pour voir l'historique de toutes les modifications

bzr revert -r <un numero de version>

... pour revenir à une version précédente

bzr help <commande> ... pour plus d'information sur une commande bzr, par exemple bzr help revert vous donnera la documentation et des exemples sur l'utilisation de la commande revert.

Conclusion

Voila un premier tutoriel...
Rien de vraiment exhaustif, il manque un gros tas de commande mais je voulais juste montrer un cas concret : ce qui va être utile à mes collaborateurs les mois à venir.

Pour une documentation plus 'documentation', je vous conseille ces quelques excellents liens issus de la documentation francophone de bazaar :