Utilisation Mercurial

De Wiki Arthion

Adresse du dépot de travail actuel: http://learningruby.hg.sourceforge.net/hgweb/learningruby/learningruby/ (pour la suite : remplacer username par le vrai nom d'utilisateur :))
adresse ssh du dépot : ssh://username@learningruby.hg.sourceforge.net/hgroot/learningruby/learningruby


Mercurial

Sur windows, mieux que le cmd par défaut, on peut lancer powershell


Initialisation d'un projet

hg init : crée un dépot dans le dossier courant ou bien hg clone adressedudépotdistant : si le dépot existe déjà


Utilisation courante

hg add : ajoute les fichiers dans le dépot
hg commit ou hg com : crée un commit, et demande de spécifier les changements faits dans le commit
hg com -m "descriptions des changements" : moyen rapide de faire un commit sans ouvrir d'éditeur texte
hg com -A -m : -A permet de faire un hg addremove automatiquement (ajoute et supprime les fichiers comme un grand

hg mv source dest : déplace un fichier
hg cp source dest : copie un fichier

hg tip : affiche le dernier changeset
hg log : affiche l'historique des changements
hg status ou hg st : affiche les changements depuis le dernier commit (M : modifié, ! : disparu R : supprimé (confirmation de disparition) ? : inconnu (fichier qui n'a pas été ajouté au dépot) A : ajouté
hg diff [-r numrevision] nomdefichier : affiche les changements apportés à un fichier depuis le dernier commit ou depuis une révision donnée
hg revert nomdefichier : ramene un fichier à sa version précédente - mercurial ne supprime pas l'original, penser à le supprimer -
hg revert --all : ramene tous les fichiers du dépot à leur état précédent

hg remove nomdefichier : confirme à mercurial que le fichier a été supprimé et qu'il ne faut plus le suivre
hg cat [-r numrevision] nomdefichier affiche le contenu d'un fichier à une révision donnée
hg update -r numrev : ramene l'ensemble des fichier à une révision donnée (par défaut la derniere révision)

hg tag Version-1.0 ajoute un tag au dépot (permet d'identifier les versions)

hg rollback : annule un seul commit qui n'a pas été push sans pour autant annuler les changements faits
hg parent : affiche la révision du dossier courant (utile pour vérifier si on est bien sur la derniere)

Exemple d'utilisation :
1. Faire quelques changements
2. Voir si ils marchent
3. Si ils marchent : commit
4. S'ils ne marchent pas : revert

Utilisation en équipe

hg clone adresse_du_dépot_distant : crée un clone du dépot distant
hg push : envoie les commits locaux sur le dépot distant ne jamais faire de push -f (si message d'erreur, d'autres ont travaillé sur le code depuis le dernier pull)
hg pull  : récupère les derniers commits sur le serveur distant
hg pull -u  : combine un pull et un update en une ligne
hg outgoing ou hg out : affiche la liste des changements qui seraient envoyé avec un push
hg incoming : affiche les changements quit ont eu lieu depuis le dernier pull
hg merge : combine deux sets de changements qui ont eu lieu en meme temps par deux personnes différentes (penser à commit après)
hg up : met à jour le repertoire de travail avec le dernier changeset du dépot
hg log -p  : affiche le changelog du dernier commit (utile pour voir ce qui a changé apres un pull)

Exemple de travail en équipe :
1. Début de la journée, on récupère la derniere version sur laquelle tout le monde travaille :

  • hg pull
  • hg up

2. Faire quelques changements
3. Commit local
4. Répéter 2 et 3 jusqu'a avoir du code qu'on veut partager avec les autres
5. Quand on est pret a tout envoyer :

  • hg pull pour récupérer les changements des autres
  • hg merge pour les intégrer avec les miens
  • tester pour voir si tout fonctionne
  • hg commit (le merge)
  • hg push

Utilisation avancée

Code expérimental

On veut faire grosse expérience sur le code
Pour pouvoir continuer à commit, on va créer un dépot expérimental à partir du dépot local :

hg clone dépot_local dépot_expérimental (penser à cd ..)

Si l'expérience rate, on supprime le dossier expérimental
Si l'expérience a fonctionné, on peut ensuite faire un push vers le dépot local
Attention, sur le dépot local, pour voir les changeset apportés par la version expérimentale, il faut hg update

Annuler un tres vieux changeset

hg backout -r revision -- merge : annule un changeset ancien et applique les changements dans la version courante

Corriger un bug apparu dans un commit donné

On pourrait le corriger dans la version courante, mais c'est plus clair de le corriger en revenant sur le changeset ou le bug est arrivé.
Imaginons que le bug est arrivé à dans la rev3
hg update 3
(fix the bug)
hg commit (la correction du bug)
hg merge
hg commit (le merge)
hg update tip (revenir à la version de travail)

Tortoise

Créer un dossier clic droit, clone source path : ssh://kamiben@learningruby.hg.sourceforge.net/hgroot/learningruby/learningruby

Pour synchroniser clic droit, tortoise, synchronise et dans la fenetre push


Authentification sourceforge sans mot de passe par clé privé/publique sur windows

  • Lancer le programme puttygen.exe
  • Dans le menu key, choisir SSG2-DSA
  • Cliquer sur generate
  • Bouger la souris dans le carré pour créer quelques données aléatoires
  • Entrer USERNAME@shell.sourceforge.net dans le commentaire de la clé
  • Laisser le champ passphrase vide - il s'agit du mot de passe de la clé, mais il faudrait l'entrer a chaque fois, ce qui n'a aucun interet. Attention par contre, la clé ne sera pas tres sécurisée. Ne l'utiliser que sur sourceforge et la supprimer en cas de piratage de son pc.
  • Cliquer sur save private key. faites aussi un save public key mais ne fermez pas la fenetre.
  • Aller sur https://sourceforge.net/account/ssh et coller le contenu de la fenetre public key.
  • Quittez puttygen

Il faut attendre environ 5mn max avant que la clé soit prise en compte

Pour dire à tortoise d'utiliser cette clé, il faut passer par l'application pageant.
Créer un raccourci avec : "C:\Program Files (x86)\PuTTY\pageant.exe" "cheminverslacléprivée\clefprivée.ppk"
Le lancer (il se met dans le tray)

A partir de maintenant on peut push et pull sans devoir mettre de mot de passe (normalement :))


Inutile mais pour archive Première étape : ouvrir son compte ssh chez sourceforge

avec putty : host : shell.sourceforge.net dans connection date : autologin username : username,projectname (learningruby) dans connection,ssh ajouter remote command : CREATE aller dans session, mettre un nom, et save se connecter il demande le mot de passe et crée l'acces


il faudra se créer le shell (dure 2h) avant de synchroniser sur le repo de sourceforge