Ce document est la traduction de l'original en anglais TutorialFirstChange

Tutorial - faire nos premiers changements

(Cette page est la partie 4 sur 9 de la série FrenchTutorial. La partie précédente est FrenchTutorialHistory, la suivante FrenchTutorialShareChange)

Nous arrivons du FrenchTutorialHistory, nous sommes dans notre dépôt mon-hello qui a été cloné dans le FrenchTutorialClone

Une bonne pratique de développement sous Mercurial est d'isoler chaque changement dans un dépôt séparé (référez vous aussi aux pratiques de travail). Cela évite de mélanger des modifications non liées entre elles et simplifie les tests de gros morceaux de travail un par un. Commençons en suivant ce modèle.

Notre but initial est de modifier notre programme "hello, world" pour qu'il affiche une autre ligne. Pour commencer, clonons notre dépôt mon-hello en un nouveau dépot mon-hello-new-output pour notre petit projet (utilisation de Mercurial 1.0) :

$ cd ..
$ hg clone mom-hello mon-hello-new-output
updating working directory
2 files updated, 0 files merged, 0 files removed, 0 files unresolved

Note: Notez que nous avons donné à notre dépôt un nom descriptif qui identifie simplement le but de celui-ci. Puisque cloner un dépôt est une opération peu coûteuse avec Mercurial, nous en accumulerons rapidement un certain nombre, tous différents. Si nous ne donnons pas de noms descriptifs à ceux-ci, nous perdrons rapidement la capacité de les identifier un à un (cf. RepositoryNaming).

Maintenant il est temps de faire un changement dans notre nouveau dépôt. Allons dans le répertoire de travail qui est simplement le nom du répertoire contenant les fichiers, et modifions le code source avec notre éditeur favori :

$ cd mon-hello-new-output
$ vi hello.c

Le contenu de hello.c ressemble initialement à ceci:

/*
 * hello.c
 *
 * Placed in the public domain by Bryan O'Sullivan
 *
 * This program is not covered by patents in the United States or other
 * countries.
 */

#include <stdio.h>

int main(int argc, char **argv)
{
        printf("hello, world!\n");
        return 0;
}

Éditons la fonction main pour qu'elle affiche une ligne supplémentaire :

(...)

int main(int argc, char **argv)
{
        printf("hello, world!\n");
        printf("sure am glad I'm using Mercurial!\n");
        return 0;
}

Une fois que c'est fait, quittons notre éditeur favori et c'est fini. Voilà. L'édition est maintenant prête pour consister en un ChangeSet.

Mais que se passe-t-il si nous avons été interrompu, et que nous avons oublié quels changements vont être intégrés dans le Changeset une fois créé ? Pour cela, nous utilisons la commande status.

$ hg status
M hello.c

Cette sortie est laconique, mais le préfixe M dit simplement que hello.c a été modifié, ainsi, notre changement est prêt pour être intégré à un ChangeSet.

Au lieu d'un long hg status, nous pouvons simplement taper hg st puisque Mercurial nous permet d'abréger les commandes tant que la séquence de caractères n'est pas ambiguë.

$ hg st
M hello.c

Nous devrions aussi examiner les changements actuels que nous avons fait aux fichiers en utilisant la commande diff.

$ hg diff
diff -r 82e55d328c8c hello.c
--- a/hello.c   Fri Aug 26 01:21:28 2005 -0700
+++ b/hello.c   Mon May 05 00:27:56 2008 +0200
@@ -12,5 +12,6 @@
 int main(int argc, char **argv)
 {
        printf("hello, world!\n");
+       printf("sure am glad I'm using Mercurial!\n");
        return 0;
 }

<!> Dans le cas où nous voudrions annuler les changements et recommencer, nous pouvons utiliser la commande revert pour restaurer hello.c à son état non modifié (ou utiliser l'option --all pour restaurer tous les fichiers). Soyez juste sûrs qu'il s'agit vraiment de ce que vous voulez faire (cf. revert).

$ hg revert hello.c

revert renomme le fichier modifié hello.c en hello.c.orig et restaure hello.c à son état non modifié.

status liste maintenant hello.c.orig comme non suivi (préfixe "?").

$ hg st
? hello.c.orig

Si nous changeons encore d'avis et que nous décidons de réutiliser les modifications que nous avions apportées, il suffit juste de supprimer l'état non modifié de hello.c et renommer la version modifiée hello.c.orig en hello.c

$ rm hello.c
$ mv hello.c.orig hello.c
$ hg st
M hello.c

Le fait de créer un ChangeSet est appelé "committer". Nous faisons un commit à l'aide de la commande commit. La commande commit dispose d'un court alias utile : ci ("check in"), donc, nous pouvons utiliser ceci :

$ hg ci

Ceci va nous envoyer dans un éditeur de texte et nous présenter quelques étranges lignes de texte.

Note : l'éditeur par défaut est vi. Ceci peut être changé en utilisant la variable d'environnement EDITOR ou HGEDITOR.

HG: Enter commit message.  Lines beginning with 'HG:' are removed.
HG: --
HG: user: mpm@selenic.com
HG: branch 'default'
HG: changed hello.c

La première ligne est vide et les suivantes identifient l'utilisateur, les branches et les fichiers qui iront dans le ChangeSet.

La branche par défaut est appelée "default" (cf. NamedBranches). La valeur par défaut pour "user" est prise depuis le fichier de configuration ~/.hgrc à partir de la valeur "username" de la section "ui" (cf. hgrc(5)). Alternativement, cette information peut être précisée sur la ligne de commande avec l'option -u (cf. hg help ci ou commit).

Pour soumettre le ChangeSet, nous devons donner une explication sur celui-ci (cf. ChangeSetComments). Tapons quelque chose comme ça :

Express great joy at existence of Mercurial
HG: Enter commit message.  Lines beginning with 'HG:' are removed.
HG: --
HG: user: mpm@selenic.com
HG: branch 'default'
HG: changed hello.c

Ensuite, nous sauvons et quittons l'éditeur. Si tout s'est bien passé, la commande commit va quitter et n'afficher aucune sortie.

<!> Si vous quittez l'éditeur sans sauver le texte ou sans entrer de commentaire, commit va annuler l'opération. Vous pouvez donc changer d'avis avant de committer.

Regardons maintenant ce que la commande status nous donne :

$ hg st

Rien du tout ! Notre changement a été soumis à un ChangeSet, il ne reste donc plus de fichier modifié à committer. Notre Tip correspond maintenant au contenu du dossier du dossier de travail.

La commande parent nous montre que le répertoire de travail de notre dépôt est maintenant synchronisé (cf. update) au nouveau ChangeSet committé (Ici, nous avons seulement un parent pour notre révision, ce qui est toujours le cas avant un commit. Nous allons voir deux parents dans le FrenchTutorialMerge):

$ hg par
changeset:   2:86794f718fb1
tag:         tip
user:        mpm@selenic.com
date:        Mon May 05 01:20:46 2008 +0200
summary:     Express great joy at existence of Mercurial

Ça y est ! Nous avons commité un nouveau ChangeSet.

Nous pouvons maintenant examiner l'historique pour notre travail :

$ hg log
changeset:   2:86794f718fb1
tag:         tip
user:        mpm@selenic.com
date:        Mon May 05 01:20:46 2008 +0200
summary:     Express great joy at existence of Mercurial

(...)

changeset:   2:b8daa9444f08
tag:         tip
user:        Matt Mackall <mpm@selenic.com>
date:        Sun Aug 28 02:10:28 2005 -0700
summary:     Voici l'expression de la grande joie de l'existence de Mercurial

...

Note: L'utilisateur, la date et le ChangeSet ID vont bien sûr varier.

Comme nous en parlions dans le FrenchTutorialClone, le nouveau ChangeSet existe uniquement dans ce dépôt. Il s'agit d'une part critique de la façon dont Mercurial travaille.

Pour partager ces changements, nous devons continuer avec le partage d'un ChangeSet (push).


CategoryTutorial CategoryFrench

FrenchTutorialFirstChange (last edited 2012-11-06 16:29:50 by abuehl)