Premiers pas avec Mercurial
Installation et configuration
Vous pouvez [télécharger Mercurial][1] depuis le site Web du projet, et il existe des [utilitaires graphiques][2] pour Windows, Linux et OSX si vous préférez cela à une interface de ligne de commande. La plupart des gestionnaires de packages Unix incluent Mercurial, par exemple sur Debian/Ubuntu :
$ apt-get install mercurial
Vous pouvez vérifier que Mercurial est installé en exécutant :
$ hg --version
Installer
Mercurial est prêt à l’emploi, mais vous souhaiterez probablement configurer Mercurial pour savoir qui vous êtes avant d’aller plus loin. Pour associer un nom d’utilisateur à vos commits, modifiez ~/.hgrc
(ou mercurial.ini
dans votre répertoire personnel sous Windows) et ajoutez les lignes suivantes :
[ui]
username = Your Name <[email protected]>
Si vous ne voulez pas faire cela, vous pouvez toujours spécifier un nom d’utilisateur lorsque vous validez avec le drapeau -u
, par exemple :
$ hg commit -u "Your Name <[email protected]>"
[1] : https://www.mercurial-scm.org/downloads [2] : http://tortoisehg.bitbucket.org/
Commencer
Voir aussi le [Tutoriel Mercurial][1]
Création d’un référentiel Mercurial
Un référentiel Mercurial est simplement un répertoire (appelé “répertoire de travail”) contenant un répertoire .hg
avec des métadonnées sur le contenu du référentiel. Cela rend Mercurial très léger et facile à utiliser. Pour créer un nouveau référentiel, exécutez simplement :
$ hg init project
Où project
est le nom du répertoire que vous souhaitez créer. Cela crée un répertoire project
ainsi qu’un répertoire project/.hg
contenant le référentiel lui-même.
$ cd project
$ echo Hello World > hello.txt
$ hg stat
? hello.txt
Nous venons de créer un fichier hello.txt
dans le référentiel et avons exécuté hg status
(ou stat
en abrégé) pour voir l’état actuel de notre dépôt. Comme vous pouvez le voir, hello.txt
est annoté avec un ?
, ce qui signifie que Mercurial n’en est pas encore conscient. La commande add
enregistre ce nouveau fichier auprès de Mercurial afin qu’il soit inclus dans le prochain commit.
$ hg add hello.txt
Maintenant que Mercurial est au courant d’un fichier modifié, vous pouvez exécuter diff
pour voir exactement ce qui a changé depuis le dernier commit - dans ce cas, nous ajoutons le contenu complet de hello.txt
:
$ hg diff
diff -r 000000000000 hello.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hello.txt Sat Jul 23 01:38:44 2016 -0400
@@ -0,0 +1,1 @@
+Hello
Et une fois que nous en sommes satisfaits et prêts à enregistrer nos modifications, nous pouvons exécuter commit
:
$ hg commit -m "Created a hello world file."
Notez que nous avons inclus un message de commit avec -m
- si vous ne spécifiez pas -m
Mercurial lancera un éditeur de texte dans lequel vous pourrez entrer un message de commit. Ceci est utile si vous souhaitez fournir un multi -message en ligne.
Une fois que vous avez validé vos modifications, elles ne s’affichent plus si vous exécutez hg stat
puisque le référentiel est maintenant synchronisé avec le contenu du répertoire de travail. Vous pouvez exécuter log
pour voir une liste des commits, et -v
inclut des détails supplémentaires comme les fichiers touchés par chaque commit :
$ hg log -v
changeset: 0:b4c06cc77a42
tag: tip
user: Michael Diamond@Aodh <[email protected]>
date: Sat Jul 23 01:44:23 2016 -0400
files: hello.txt
description:
Created a hello world file.
[1] : https://www.mercurial-scm.org/wiki/Tutorial
Pousser et tirer
Mercurial facilite le partage de votre travail et l’apport de contributions d’autres développeurs. Cela implique trois étapes clés; [clonage][1], [tirer][2] et [pousser][3].
Cloner
Pour copier un référentiel distant sur votre disque local, vous le “clonez”. Pour ce faire, transmettez simplement l’URL distante à partir de laquelle vous souhaitez cloner. Pour cloner le code source de Mercurial, lancez simplement :
$ hg clone https://selenic.com/hg
Cela crée un répertoire hg
local contenant une copie du référentiel Mercurial que vous pouvez construire, modifier et valider (bien que vous ne puissiez pas publier vos commits dans le référentiel parent).
Tirer
Une fois que vous avez extrait un référentiel, vous voudrez le garder synchronisé pendant que d’autres y publient des modifications. Vous pouvez retirer de nouvelles modifications en exécutant simplement :
$ hg pull
Cela extrait de nouveaux commits mais ne met pas à jour votre répertoire de travail, vous ne verrez donc aucun changement immédiatement. Pour [mettre à jour][4] le contenu du répertoire de travail, exécutez :
$ hg up
Ce qui met à jour votre répertoire de travail vers la dernière révision (la plus récente) du référentiel.
Vous pouvez également exécuter :
$ hg pull -u
Pour extraire de nouvelles modifications et mettre à jour le répertoire de travail en une seule étape.
Pousser
En supposant que vous ayez un accès en écriture au référentiel distant, vous pouvez publier tout commit que vous avez effectué localement sur le référentiel distant tout aussi facilement avec :
$ hg push
Cela télécharge vos modifications tant qu’il n’y a pas eu d’autres commits depuis la dernière fois que vous avez tiré. Si votre push
est rejeté parce qu’il “créerait des têtes supplémentaires”, cela signifie que vous devez insérer ces nouvelles modifications et les fusionner avec les vôtres.
$ hg pull
$ hg merge # this creates a new changeset merging your changes with the remote changes
$ hg commit -m "Merged in remote changes"
$ hg push
La plupart du temps, c’est tout ce que vous aurez à faire puisque Mercurial gère automatiquement la fusion de vos modifications, mais parfois vous devrez résoudre les conflits de fusion manuellement (voir le sujet sur la fusion). Si vous en avez besoin, vous pouvez toujours annuler une fusion et revenir à un répertoire de travail propre avec :
$ hg up -c
Mais rappelez-vous que c’est une opération destructrice ; tout changement dans le répertoire de travail sera effacé.
[1] : https://selenic.com/hg/help/clone [2] : https://selenic.com/hg/help/pull [3] : https://selenic.com/hg/help/push [4] : https://selenic.com/hg/help/update
Branchement
Lorsque nous commençons notre travail pour la première fois, nous devons décider s’il s’agit d’un domaine de travail distinct sur lequel nous travaillons ou s’il fait partie d’une ligne de travail existante. Si elle existe, nous pouvons travailler à partir de cette branche. Si c’est nouveau, nous ouvrirons une nouvelle branche.
Notre flux de travail est alors :
hg branch MyNewFeature
- travail Travail travail
hg commit -m "committing my changes"
- travail Travail travail
hg commit -m "plus de changements"
À ce stade, nous voulons pousser notre travail vers le serveur distant. Mais avant de pousser les modifications (ignorez ceci s’il s’agit d’une nouvelle branche que vous n’avez pas encore poussée), nous devons vérifier s’il y a des modifications entrantes dans cette branche. Nous pouvons vérifier cela avec :
hg incoming -b .
S’il y a des ensembles de modifications entrants sur notre branche, nous devons faire une extraction et rebaser nos modifications en haut de la liste des modifications.
hg pull -b . --rebase
Une fois cela fait ou s’il n’y a pas de changesets entrants, nous pouvons procéder au Push.
Nous voulons seulement pousser notre travail actuel, pas tout ce que nous avons déjà fait. Je ne pousse vraiment jamais tout mon référentiel, mais ma ligne de travail actuelle. Le raisonnement est que pousser l’ensemble du référentiel suppose que j’intègre plusieurs lignes de travail. Mais je veux seulement intégrer mon métier actuel, et je ne veux travailler que dans un métier à la fois.
Si c’est la première fois que je pousse cette branche:
hg push -b . --new-branch
Si j’ai déjà poussé cette branche:
hg push -b .
Le “-b”. commande signifie simplement pousser la branche actuelle, et rien d’autre.
Pour passer d’une branche de travail à l’autre :
hg update myBranchName