Opérations préalables
Toutes les opérations de ce chapitre ne sont à effectuer
qu'une seule fois par projet et par machine.
Créer un dépôt online
Lorsqu'on travaille en équipe avec Mercurial, il faut avant tout un dépôt accessible tout le temps.
Si vous souhaitez juste faire de la sauvegarde pour votre projet en solo, cette étape n'est pas utile. Si vous vous synchronisez régulièrement en vous voyant, ce n'est pas nécessaire non plus.
Pour ce faire, on utilisera
http://bitbucket.org qui fournit un dépôt Mercurial gratuitement.
Je passe assez rapidement ici car le site est extrêmement bien documenté et très simple d'utilisation.
La première chose à faire maintenant est de se créer un compte sur ce site.
Puis vous créez un projet et enfin vous rajoutez tous vos collègues (qui se seront inscrits aussi) aux utilisateurs/administrateurs. Je vous recommande vivement ce site car il fournit aussi un bug tracker et un wiki par projet ce qui permet une gestion du projet de bout en bout !
Une fois cela fait, vous pouvez enfin faire du Mercurial !
À partir de maintenant, tout se passera en ligne de commande.
Pour les Linuxiens, pas de soucis : vous ouvrez un shell. Pour les Windowsiens par contre, il faut aller dans « Démarrer » puis « Exécuter » puis tapez « cmd » et validez avec la touche
Entrée. Cela devrait vous ouvrir une console.
Il faut maintenant vous placer dans le dossier où vous voulez stocker vos projets à coup de CD (voir
le tutoriel de M@teo sur Linux pour ça).
La commande CD fonctionne aussi dans la console Windows !
On va commencer par récupérer tous les fichiers du projet. On dit qu'on
clone le dépôt (en fait, vous créez un dépôt identique à celui que vous clonez, simplement comme votre PC n'est pas tout le temps joignable, on ne l'utilisera pas comme dépôt principal).
Vous allez donc taper la commande :
Code : Console | hg clone http://mercurial.intuxication.org/hg/monprojet |
Remplacez « monprojet » par le nom de votre projet.
Euh ?! Moi je veux juste faire de la sauvegarde en local, je fais comment ?
En effet, là, vous ne pouvez rien cloner. Il faut initialiser le dépôt.
Allez dans le répertoire de votre projet puis tapez :
Code : Console
Maintenant la travail commence !
Les commandes principales
Voir le statut de tous les fichiers
Mercurial tient un statut de tous les fichiers qui sont dans le dossier de votre projet.
Pour voir le statut de tous les fichiers, il faut taper la commande suivante :
Code : Console
Cela va vous afficher tous les fichiers qui ont un statut particulier.
Voici un exemple de ce que peut donner cette commande :
Code : Console | M teletubies/lala
M listePersonnages
A pokemon/pikachu
R telerama/zoidberg
! onepiece/pipo
? HNG/touyaAkira |
Explications !
Vous pouvez voir que sur chaque ligne, vous avez un statut qui tient sur un caractère et un fichier.
Les statuts sont les suivants :
- M : le fichier a été modifié depuis la dernière version ;
- A : le fichier a été ajouté à Mercurial ;
- R : le fichier a été supprimé de Mercurial ;
- ! : le fichier a été supprimé physiquement mais pas de Mercurial ;
- ? : le fichier a été ajouté physiquement mais n'est pas pris en charge par Mercurial.
Vous remarquerez que les fichiers qui sont pris en charge par Mercurial et qui ne sont pas modifiés depuis la dernière version n'apparaissent pas.
Qu'est-ce que c'est que cette histoire de prise en charge, là ?
C'est un point important pour comprendre Mercurial.
Vous pouvez vouloir faire des fichiers qui ne seront pour autant pas mis sur le dépôt. Prenons l'exemple d'un fichier de test qui récupère les sorties du programme pour que vous fassiez des vérifications. Un tel fichier n'a pas de réel intérêt pour le projet. Il est juste là temporairement pour des besoins de débogage. Du coup, si l'on ne veut pas le mettre dans sa version de Mercurial, il ne faudra pas l'y ajouter. Il aura le statut « ? ».
Et si par malheur vous avez ajouté un fichier qui ne sert à rien au Mercurial, vous pouvez toujours le supprimer du Mercurial ; il prendra alors le statut « R ».
Ajouter/supprimer un fichier à Mercurial
Comme on vient de le voir, créer un fichier ne suffit pas pour que Mercurial prenne en charge ses versions. Il faut lui dire de le faire.
Rien de bien compliqué, il suffit de taper :
Code : Console
Et pouf !

Mercurial le prendra en charge dans la prochaine version !
Si vous faites
hg st, vous verrez que « monfichier » est passé du statut « ? » au statut « A ».
Pour supprimer un fichier, c'est tout aussi simple que pour l'ajout :
Code : Console
Si vous faites
hg st, vous verrez que « monfichier » est passé du statut « normal » (il n'apparaît pas) au statut « R ».
S'il était en « ! » (donc supprimé physiquement), vous en perdrez définitivement trace dans les versions suivantes (mais vous pourrez toujours le récupérer d'une ancienne).
Fatigué de faire ça à chaque fichier ?
Si vous avez beaucoup de fichiers à ajouter et à supprimer, il y a une commande bien utile :
Code : Console
Cette commande va passer tous les fichiers dont le statut est « ? » en « A », et tous les « ! » en « R ».
En résumé, ça applique tous les ajouts/suppressions que vous avez faits physiquement.
Création de version, mise à jour du serveur et synchronisation
Vous avez modifié/supprimé/ajouté des fichiers jusqu'à plus soif ? Une fois la série de modifications effectuée, il faut maintenant les « pousser » sur le serveur.
Pousser ?!
Oui oui, je sais, c'est bizarre. Mais vous comprendrez quand vous verrez la commande.
Mais avant de pousser, il faut dire à Mercurial : « J'ai bien travaillé, regarde ma nouvelle version ».
On tape donc cette commande :
Code : Console
Elle va ouvrir un document texte un peu pré-rempli (Vim sous Linux et Bloc-notes sous Windows).
Il faut laisser un court message (une ligne) qui explique où commence ce que vous avez fait (ex. : correction bug #124596).
Ne modifiez pas ce qui est en dessous, ça décrit les fichiers modifiés.
Pour les allergiques à Vim, il est possible de changer et d'ouvrir Nano par défaut (voir la section « Configurer Mercurial »).
Certains auront peut-être une erreur ici.
En effet il se peut que Mercurial vous dise :
Code : Console | abandon : no username supplied (see "hg help config") |
Il y a deux façon de corriger ce problème. Soit vous modifiez le fichier
hgrc dans le dossier
.hg. Soit vous créez/modifiez le fichier
.hgrc dans votre dossier utilisateur. Dans les deux cas, il vous faut mettre les lignes suivantes :
Code : Console | [ui]
username=mon nom <mon_adresse@mail.pipo> |
Vous pouvez mettre ce que vous voulez, c'est juste ce qui apparaîtra comme nom d'utilisateur dans les commits.
Bon maintenant que nous avons réglé ce petit problème, vous voici l'heureux créateur de ce qu'on appelle une
révision ou version. Maintenant, vous êtes prêt à mettre à jour le serveur avec vos changements.
Il faut taper la commande suivante :
Code : Console
(Vous comprenez maintenant ? On pousse.

)
Et hop, c'est magique ! On a mis à jour le serveur avec nos fichiers où l'on a corrigé toutes les fautes (pour en ajouter d'autres mais ça, il ne faut pas le dire

).
Normalement, ça va vous demander un login et un mot de passe. Puis à la fin, ça va vous dire les changements effectués sur le serveur.
Ras-le-bol d'entrer le login et le mot de passe à chaque
push ?
Je vous dirige encore une fois vers la partie « Configurer Mercurial ».
Maintenant, imaginons que vous êtes parti quelques jours mais que vos copains développeurs ont bossé (plus ou moins bien...). Il faut donc télécharger leurs modifications. En d'autres termes, se synchroniser !
Tapez donc la commande suivante pour voir...
Code : Console
Han, tiens ! ça marche. Chouette.

Notez que
pull veut dire « tirer », le contraire de
push (« pousser ») donc.
Le -u veut dire qu'on met ses fichiers à jour (car on peut en effet récupérer les fichiers sans se mettre à jour mais c'est déjà de l'utilisation un peu plus évoluée que je n'aborderai pas...).
Bon : on va s'amuser un peu maintenant.
Mergeons !
Imaginons quelque chose comme ça :
Vous faites un
hg pull -u pour vous mettre à jour. Dans une contrée lointaine, quelqu'un fait pareil. O.K. pour l'instant, tout va bien. Vous faites vos modifications. Notre protagoniste étrange fait de même mais il est plus rapide (rah ! le fourbe !). Il met le serveur à jour.
Quelque temps plus tard, vous avez enfin fini. Vous faites :
Code : Console
Et là : PAF !
Mercurial ne veut rien savoir, vous n'êtes pas synchro avec le serveur. En effet, vous avez modifié une version antérieure à celle qu'il possède.
Il vous faut donc faire ce qu'on appelle un « merge », c'est-à-dire faire en sorte que vos modifications n'explosent pas tout ce qu'ont fait vos collègues.
On va commencer par récupérer ce qui a été fait sur le serveur :
hg pull -u (pas d'inquiétudes, ça ne va pas écraser vos modifications).
Ensuite, il faut vous synchroniser avec ce que vous avez téléchargé. Autrement dit, il faut intégrer vos modifications dans cette nouvelle version.
On commence par faire
hg merge, ce qui va régler tous les conflits mineurs, c'est-à-dire les fichiers que vous avez modifiés mais auxquels vos collègues n'ont pas touché ; c'est simple, il suffit de prendre vos modifications. Comme c'est facile, Mercurial le fait tout seul.
Par contre, si vous avez modifié un fichier que votre ami a aussi modifié, il faut en général régler le conflit à la main. Au sortir de la commande
merge et s'il y a des conflits un peu compliqués, Mercurial va donc vous ouvrir un éditeur de texte avec trois versions du fichier : la vôtre, celle du serveur et le fichier résultat. À vous de vous débrouiller avec ça pour en tirer quelque chose.

Il vous faudra donc analyser le fichier et tout et tout pour voir ce que vous pouvez garder/changer/supprimer.
Une fois le merge effectué, faites :
Code : Console
Les modifications seront uploadées sur le serveur. Dans ce dernier
ci, on indique en général qu'on a fait un
merge.
Lire le log
Le log ? C'est quoi ça encore ?!
Ce qu'on appelle le
log, c'est la liste des modifications faites. En gros, on va lire les messages laissés quand on fait un
hg ci.
Deux commandes pour ça.
Lire le dernier changement :
Code : Console
Lire tous les changements :
Code : Console
Tagger une version
Une dernière chose.
Il n'est pas beau d'avoir des numéros de versions qui ressemblent à
af3f049e9b41.
Pour avoir des beaux numéros de versions, vous pouvez utiliser la commande
hg tag v0.5rc.
Cette commande va
tagger la version actuelle pour qu'elle ait le nom
v0.5rc.
Ainsi, vous pouvez faire comme les vrais pros et avoir des versions qui ressemblent à quelque chose.