Mercurial pour nous les nuls, leçon 7 : diff

L’index des leçons précédentes :

  1. Leçon 1 : la gestion de version
  2. Leçon 2 : qu’est-ce qu’un dépôt ?
  3. Leçon 3 : les logiciels ”clients”
  4. Leçon 4 : création d’un dépôt
  5. Leçon 5 : enregistrement de révision
  6. Leçon 6 : synchronisation de dépôts, mise à jour du répertoire de travail
  7. Leçon 7 : identifier les différences
  8. Leçon 8 : la gestion des branches
  9. Leçon 9 : la fusion de branche
  10. Leçon 10 : retour vers le passé
  11. Leçon 11 : patch et collaboration indirecte

Identifier les différences apportées aux fichiers : Diff

Il est fréquemment utile d’avoir la possibilité d’identifier les modifications apportées et enregistrées au fur et à mesure des commit. Pour cela, si l’on consulte l’historique des révision avec MacHg, nous avons la possibilité d’afficher les modifications apportées à tous les fichiers impactés par une révision. Il suffit de cliquer sur le nom d’un des fichiers en question, ou sur le bouton Diff de la barre d’outil :

Historique des révisions

Le logiciel MacHg, comme la plupart des logiciels clients Hg (Mercurial), n’embarquent pas d’emblée un outil de différenciation. Par contre ils utilisent un des logiciels présents sur la machine (vous aurez peut-être besoin d’en installer un s’il n’y en a aucun chez vous). Personnellement j’ai choisi Kaleidoscope sur Mac OS X[1]. J’ai donc configuré MacHg pour qu’il le lance lorsque je demande un diff d’un ou de plusieurs fichiers et j’obtiens ainsi l’affichage suivant :

Différences affichées par Kaleidoscope

Vous remarquerez qu’une ligne est en surbrillance (violet clair) et que dans cette ligne sont mis en surbrillance (violet foncé) les différences trouvées. Kaleidoscope — comme tous les autres logiciels permettant cette fonction — proposent un affichage similaire où vous pourrez identifier les ajouts, les suppressions et les modifications.

En règle général, la version la plus ancienne du fichier est affichée à gauche, la plus récente à droite, mais vous pouvez aussi avoir un affichage combiné ou vous aurez un seul listing du contenu du fichier avec l’ancienne et la nouvelle ligne, comme sur la copie d’écran suivante :

Différences affichées par Kaleidoscope (mode combiné)

La commande équivalente sous terminal est la suivante (différences apportées au fichier _define.php entre la révision 1 et la révision 2) :

hg diff -r 1 -r 2 _define.php

qui donne ce résultat :

diff -r 1b3e176f1d98 -r 6ac4ec58d5c5 _define.php
--- a/_define.php	Mon May 30 18:30:10 2011 +0200
+++ b/_define.php	Mon May 30 18:35:21 2011 +0200
@@ -15,7 +15,7 @@
 	/* Name */			"Ductile Config",
 	/* Description*/		"Configure your Ductile Theme",
 	/* Author */			"Dotclear Team",
-	/* Version */			'0.1',
+	/* Version */			'1.0',
 	/* Permissions */		'admin'
 );
 ?>
\ No newline at end of file

D’autres logiciels équivalents existent, comme par exemple :

  • DiffMerge (disponible pour Mac OS X, Windows et Linux)[2]
  • WinMerge (pour Windows)
  • Meld (pour Linux)
  • diff (Mac OS X via XCode ou autre, linux)

Conclusion

Vous savez désormais comment examiner précisément les modifications enregistrées (commit) dans chacune des révisions présentes dans votre dépôt. C’est un premier pas vers la gestion des conflits qui pourraient se présenter lors des travaux collaboratifs, lorsque deux personnes travaillent et enregistrent des modifications sur le même fichier. Il faudra alors résoudre ce ou ces problèmes lors du merge, action que nous aborderons brièvement dans la prochaine leçon sur les branches et complètement dans la suivante.

Rappel et précaution

Je reviens brièvement sur le cycle que j’évoquais dans la leçon précédente, dans lequel je vais déplacer les deux dernières actions en début de liste :

  1. Pull depuis le dépôt distant pour récupérer les révisions qui manquent ;
  2. Update pour mettre à jour le répertoire de travail au niveau de la dernière révision ;
  3. Changement dans le répertoire de travail (création de nouveaux fichiers, modifications de certains d’entre eux, suppressions éventuelles, …) ;
  4. Commit pour enregistrer ces changements (ce qu’on appelle une révision) ;
  5. Push vers le dépôt distant pour synchroniser la ou les révisions enregistrées localement.

Pourquoi avoir déplacé ces deux actions ? Simplement parce qu’avant de travailler sur vos fichiers il vaut mieux s’assurer que vous allez le faire sur la dernière version de ceux-ci et pas sur une précédente. En faisant un pull assorti d’un update vous êtes certain d’être dans ce cas et de vous éviter des manipulations supplémentaires au moment de synchroniser vos dépôts (locaux et distants).

Il va de soi que lors de la toute première utilisation d’un dépôt, alors qu’il vient juste d’être créé, il n’est pas utile de faire ce pull et cet update.

Nous verrons également dans la prochaine leçon que la gestion des branches peut influer légèrement sur ce cycle.

Glossaire

diff : commande permettant de retrouver et d’afficher les modifications apportées à un ou plusieurs fichiers

Pour en savoir plus


Leçon suivante

Notes

[1] Ce logiciel est payant mais offre en plus d’un affichage élégant des différences, la possibilité de comparer deux versions d’une image.

[2] Je reviendrai sur l’usage de ce logiciel que j’utilise pour la résolution des conflits lors des merge.

Ajouter un commentaire

Les commentaires peuvent être formatés en utilisant la syntaxe Markdown Extra.

Ajouter un rétrolien

URL de rétrolien : https://open-time.net/trackback/7130

Haut de page