L’index des leçons précédentes :
- Leçon 1 : la gestion de version
- Leçon 2 : qu’est-ce qu’un dépôt ?
- Leçon 3 : les logiciels ”clients”
- Leçon 4 : création d’un dépôt
- Leçon 5 : enregistrement de révision
- Leçon 6 : synchronisation de dépôts, mise à jour du répertoire de travail
- Leçon 7 : identifier les différences
- Leçon 8 : la gestion des branches
- Leçon 9 : la fusion de branche
- Leçon 10 : retour vers le passé
- 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 :
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 :
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 :
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 :
- Pull depuis le dépôt distant pour récupérer les révisions qui manquent ;
- Update pour mettre à jour le répertoire de travail au niveau de la dernière révision ;
- Changement dans le répertoire de travail (création de nouveaux fichiers, modifications de certains d’entre eux, suppressions éventuelles, …) ;
- Commit pour enregistrer ces changements (ce qu’on appelle une révision) ;
- 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
- La page Wikipedia en anglais, bien plus complète que la version française.
1 De [SiMON] -
Après un test rapide de DiffMerge (dans sa version Linux, sous Ubuntu plus précisément), je ne peux que revenir à (et conseiller) Meld aux utilisateurs utilisant ce système. Ce programme fait partie des dépôts de base d’Ubuntu et propose un affichage bien plus agréable àmha.
2 De Franck -
En effet DiffMerge n’est pas très Sofa, auteur de Kaleidoscope et de Versions que j’utilise également, n’ait pas développé un logiciel prenant ça en charge.
, ce qui d’habitude revêt une certaine importance pour moi, mais par contre il assure la fonction pour lequel il a été développé. Je n’ai pas trouvé mieux sur Mac OS X et regrette beaucoup que Kaleidoscope ne puisse pas gérer la partie merge — ou que3 De Franck -
J’ai ajouté Meld à la liste des autres logiciels comme préconisé par [SiMON].