32
Département de génie électrique et de génie informatique GEL1001 Design I (méthodologie) Gestion concurrente de versions (Mercurial) Hiver 2011

GEL 1001 Design I (méthodologie)€¦ · Mercurial : développé comme un outil ligne de commande (dans un terminal)" hg version Mercurial Distributed SCM (version 1.4.2+20100104)

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: GEL 1001 Design I (méthodologie)€¦ · Mercurial : développé comme un outil ligne de commande (dans un terminal)" hg version Mercurial Distributed SCM (version 1.4.2+20100104)

Département de génie électrique et de génie informatique

GEL−1001 Design I (méthodologie)"Gestion concurrente

de versions (Mercurial)"Hiver 2011"

Page 2: GEL 1001 Design I (méthodologie)€¦ · Mercurial : développé comme un outil ligne de commande (dans un terminal)" hg version Mercurial Distributed SCM (version 1.4.2+20100104)

Hiver 2011" GEL−1001 Design I (méthodologie)" 2"

Mercurial" Outil multiplateforme « open source »" Permet de gérer un ensemble de fichiers de

manière concurrente" Chaque utilisateur modifie une copie des fichiers en

parallèle" Gère lʼhistorique" Permet de revenir en arrière sur toute version" Gère la fusion des fichiers entre plusieurs dépôts"

 Permet des accès locaux ou via Internet" Variété de protocoles disponible"

Page 3: GEL 1001 Design I (méthodologie)€¦ · Mercurial : développé comme un outil ligne de commande (dans un terminal)" hg version Mercurial Distributed SCM (version 1.4.2+20100104)

Systèmes de contrôles des versions"

  RCS (~1985)"  Contrôle des versions dans un système de fichiers particulier"

  CVS (~1990)"  Contrôle des versions avec accès distribués à un dépôt centralisé "

  Subversion (SVN) (~2000)"  Accès distribués avec dépôt centralisé"  Corrections de faiblesses de CVS (p. ex. renommer ou déplacer les fichiers)"

  Mercurial (~2005)"  Système de version décentralisé, avec emphase sur la simplicité"  Codé essentiellement en langage python"

  Git (~2005)"  Système de version décentralisé, développé pour gérer le code source du

noyau de Linux"  Concurrent de Mercurial, codé en C avec commandes en shell et perl"

Hiver 2011" GEL−1001 Design I (méthodologie)" 3"

Page 4: GEL 1001 Design I (méthodologie)€¦ · Mercurial : développé comme un outil ligne de commande (dans un terminal)" hg version Mercurial Distributed SCM (version 1.4.2+20100104)

Exemple dʼutilisation"

Hiver 2011" GEL−1001 Design I (méthodologie)" 4"

Page 5: GEL 1001 Design I (méthodologie)€¦ · Mercurial : développé comme un outil ligne de commande (dans un terminal)" hg version Mercurial Distributed SCM (version 1.4.2+20100104)

Ligne de commande ou interface graphique?"

 Mercurial : développé comme un outil ligne de commande (dans un terminal)" hg version Mercurial Distributed SCM (version 1.4.2+20100104) […]"

 Tout est possible par la ligne de commande"  Interfaces graphiques pour les opérations

quotidiennes" On doit parfois utiliser la ligne de commande pour

effectuer des opérations complexes"

Hiver 2011" GEL−1001 Design I (méthodologie)" 5"

Page 6: GEL 1001 Design I (méthodologie)€¦ · Mercurial : développé comme un outil ligne de commande (dans un terminal)" hg version Mercurial Distributed SCM (version 1.4.2+20100104)

Faire une copie locale"

 hg clone : faire une copie locale dʼun dépôt"

Hiver 2011" GEL−1001 Design I (méthodologie)" 6"

hg clone ssh://[email protected]//services! /GEL1001/equipe00/demo!

destination directory: demo"requesting all changes"adding changesets"adding manifests"adding file changes"added 2 changesets with 23 changes to 22 files"updating to branch default"22 files updated, 0 files merged, 0 files removed, 0 files " unresolved"

Page 7: GEL 1001 Design I (méthodologie)€¦ · Mercurial : développé comme un outil ligne de commande (dans un terminal)" hg version Mercurial Distributed SCM (version 1.4.2+20100104)

Visualiser lʼhistorique"

 hg log : visualiser lʼhistorique des modifications"

Hiver 2011" GEL−1001 Design I (méthodologie)" 7"

hg log!

changeset: 1:6eca9631615e"tag: tip"user: Christian Gagne <[email protected]>"date: Wed Jan 13 16:05:40 2010 -0500"summary: Date de remise modifiee."

changeset: 0:96f6ec3d3032"user: Christian Gagne <[email protected]>"date: Wed Jan 13 15:59:52 2010 -0500"summary: Ajout de l'exemple du rapport."

Page 8: GEL 1001 Design I (méthodologie)€¦ · Mercurial : développé comme un outil ligne de commande (dans un terminal)" hg version Mercurial Distributed SCM (version 1.4.2+20100104)

Révision et identifiant"  Avec Mercurial, chacun travaille avec un dépôt local

distinct"  Les dépôts sont synchronisés"  Le numéro de révision est spécifique à la copie locale"  Lʼidentifiant est globalement unique"

Hiver 2011" GEL−1001 Design I (méthodologie)" 8"

changeset: 1:6eca9631615e"

changeset: 0:96f6ec3d3032"

Révision locale Identifiant unique

Page 9: GEL 1001 Design I (méthodologie)€¦ · Mercurial : développé comme un outil ligne de commande (dans un terminal)" hg version Mercurial Distributed SCM (version 1.4.2+20100104)

Différences entre révisions"

 hg diff : connaître les différences entre deux révisions dʼun fichier"

Hiver 2011" GEL−1001 Design I (méthodologie)" 9"

hg diff -r 0!

diff -r 96f6ec3d3032 rapport/rapport_demo.tex"--- a/rapport/rapport_demo.tex "Wed Jan 13 15:59:52 2010 -0500"+++ b/rapport/rapport_demo.tex "Wed Jan 13 17:05:14 2010 -0500"@@ -51,7 +51,7 @@" 55\,555\,555 & Ordralphabétix & \\\hline % matricule & nom & \\\hline" 66\,666\,666 & Tragicomix & \\\hline % matricule & nom & \\\hline" }"-\DateRemise{23 janvier 2008} % Date de remise"+\DateRemise{5 février 2010} % Date de remise"

Page 10: GEL 1001 Design I (méthodologie)€¦ · Mercurial : développé comme un outil ligne de commande (dans un terminal)" hg version Mercurial Distributed SCM (version 1.4.2+20100104)

Historique et différences"

Hiver 2011" GEL−1001 Design I (méthodologie)" 10"

Page 11: GEL 1001 Design I (méthodologie)€¦ · Mercurial : développé comme un outil ligne de commande (dans un terminal)" hg version Mercurial Distributed SCM (version 1.4.2+20100104)

Obtenir le statut des fichiers"

 hg status : état actuel des fichiers par rapport au dépôt local"

 Fichier rapport/rapport_demo.tex est modifié" Fichier .hgignore est ajouté"

Hiver 2011" GEL−1001 Design I (méthodologie)" 11"

hg status!

M rapport/rapport_demo.tex"A .hgignore"

Page 12: GEL 1001 Design I (méthodologie)€¦ · Mercurial : développé comme un outil ligne de commande (dans un terminal)" hg version Mercurial Distributed SCM (version 1.4.2+20100104)

Modifier la copie locale"

 hg commit : intégrer les changements aux fichiers dans le dépôt local " Lʼutilisateur doit entrer une brève description des

changements" Les changements restent locaux, les modifications

ne sont pas propagées aux autres dépôts" Propagation des changements aux autres dépôts

uniquement avec hg push"

Hiver 2011" GEL−1001 Design I (méthodologie)" 12"

Page 13: GEL 1001 Design I (méthodologie)€¦ · Mercurial : développé comme un outil ligne de commande (dans un terminal)" hg version Mercurial Distributed SCM (version 1.4.2+20100104)

Modification de la copie locale"

Hiver 2011" GEL−1001 Design I (méthodologie)" 13"

Page 14: GEL 1001 Design I (méthodologie)€¦ · Mercurial : développé comme un outil ligne de commande (dans un terminal)" hg version Mercurial Distributed SCM (version 1.4.2+20100104)

Configurer le nom dʼutilisateur"

  Confirmation des changements exige de configurer Mercurial avec un nom dʼutilisateur "  Configuration dans fichier .hgrc du répertoire de lʼutilisateur"  Sous Linux et Mac OS X, fichier ~/.hgrc"  Sous Windows, le répertoire dʼutilisateur est donné par la commande

suivante (dans un terminal)C:\> echo %UserProfile%"

  Dans mon cas, la réponse est C:\Users\cgagne"  Donc, fichier à modifier est C:\Users\cgagne\.hgrc"

  Section du fichier.hgrc avec le nom dʼutilisateur"

Hiver 2011" GEL−1001 Design I (méthodologie)" 14"

# Ceci est le fichier de configuration de Mercurial. [ui] username = Prenom Nom <prenom.nom.#@ulaval.ca>

Page 15: GEL 1001 Design I (méthodologie)€¦ · Mercurial : développé comme un outil ligne de commande (dans un terminal)" hg version Mercurial Distributed SCM (version 1.4.2+20100104)

Intégrer les changements dans le dépôt maître"

  hg push : intégrer les nouvelles révisions du dépôt local dans le dépôt maître

  Modifications doivent être intégrées au préalable dans le dépôt local via hg commit"

Hiver 2011" GEL−1001 Design I (méthodologie)" 15"

hg push!

pushing to ssh://[email protected]" //services/GEL1001/equipe00/demo"searching for changes"remote: adding changesets"remote: adding manifests"remote: adding file changes"remote: added 1 changesets with 2 changes to 2 files"

Page 16: GEL 1001 Design I (méthodologie)€¦ · Mercurial : développé comme un outil ligne de commande (dans un terminal)" hg version Mercurial Distributed SCM (version 1.4.2+20100104)

Mettre à jour le dépôt local"  hg pull : intégrer les nouvelles révisions du dépôt

maître dans le dépôt local

  Met à jour uniquement le dépôt local, ne met pas à jour les fichiers locaux"

  hg pull -u : synchroniser le dépôt local et mettre à jour les fichiers locaux"

Hiver 2011" GEL−1001 Design I (méthodologie)" 16"

hg pull!

pulling from ssh://[email protected]" //services/GEL1001/equipe00/demo"searching for changes"adding changesets"adding manifests"adding file changes"added 1 changesets with 2 changes to 2 files"(run 'hg update' to get a working copy)"

Page 17: GEL 1001 Design I (méthodologie)€¦ · Mercurial : développé comme un outil ligne de commande (dans un terminal)" hg version Mercurial Distributed SCM (version 1.4.2+20100104)

Synchroniser les fichiers avec le dépôt local"

 hg update : mettre à jour les fichiers avec la révision la plus récente du dépôt local"

Hiver 2011" GEL−1001 Design I (méthodologie)" 17"

hg update!

2 files updated, 0 files merged, 0 files removed, 0 files " unresolved"

Page 18: GEL 1001 Design I (méthodologie)€¦ · Mercurial : développé comme un outil ligne de commande (dans un terminal)" hg version Mercurial Distributed SCM (version 1.4.2+20100104)

Vérifier la mise à jour"

Hiver 2011" GEL−1001 Design I (méthodologie)" 18"

Page 19: GEL 1001 Design I (méthodologie)€¦ · Mercurial : développé comme un outil ligne de commande (dans un terminal)" hg version Mercurial Distributed SCM (version 1.4.2+20100104)

Cycle de travail"  hg clone : obtenir une copie locale dʼun dépôt maître"  hg commit : sauvegarder des révisions des fichiers

dans le dépôt local"  hg push : transmettre les révisions du dépôt local

vers le dépôt maître"  hg pull : synchroniser le dépôt local avec le dépôt

maître, afin dʼobtenir toutes les nouvelle révisions"  hg update : mettre à jour les fichiers avec la révision

la plus récente présente dans le dépôt local"

Hiver 2011" GEL−1001 Design I (méthodologie)" 19"

Page 20: GEL 1001 Design I (méthodologie)€¦ · Mercurial : développé comme un outil ligne de commande (dans un terminal)" hg version Mercurial Distributed SCM (version 1.4.2+20100104)

Intégrer deux copies locales"

 Mercurial est un outil distribué, sans lʼobligation de toujours utiliser le dépôt centralisé" Deux utilisateurs peuvent directement synchroniser

leurs dépôts locaux" hg serve : démarrer un serveur temporaire

permettant à dʼautres utilisateurs de faire des hg pull de votre dépôt local"

 Offre également un serveur Web local pour explorer le contenu de dépôt (par défaut sur port 8000)"

Hiver 2011" GEL−1001 Design I (méthodologie)" 20"

Page 21: GEL 1001 Design I (méthodologie)€¦ · Mercurial : développé comme un outil ligne de commande (dans un terminal)" hg version Mercurial Distributed SCM (version 1.4.2+20100104)

Serveur Web intégré"

Hiver 2011" GEL−1001 Design I (méthodologie)" 21"

Page 22: GEL 1001 Design I (méthodologie)€¦ · Mercurial : développé comme un outil ligne de commande (dans un terminal)" hg version Mercurial Distributed SCM (version 1.4.2+20100104)

Fusion de changements et gestion de conflits"

 Mercurial fait une gestion intelligente des modifications parallèles" Si modifications sur sections différentes du fichier,

changements fusionnés automatiquement " Si modifications se recoupent, lʼutilisateur doit

intervenir manuellement" Utilisateur informé dʼun changement recoupant des

modifications absentes dans le dépôt local" Commandes clés : hg heads, hg merge, hg resolve"

Hiver 2011" GEL−1001 Design I (méthodologie)" 22"

Page 23: GEL 1001 Design I (méthodologie)€¦ · Mercurial : développé comme un outil ligne de commande (dans un terminal)" hg version Mercurial Distributed SCM (version 1.4.2+20100104)

Désynchronisation de dépôts"

Hiver 2011" GEL−1001 Design I (méthodologie)" 23"

hg push!

pushing to ssh://[email protected]" //services/GEL1001/equipe00/demo"searching for changes"abort: push creates new remote heads!"(did you forget to merge? use push -f to force)"

hg pull!

pulling from ssh://[email protected]" //services/GEL1001/equipe00/demo"searching for changes"adding changesets"adding manifests"adding file changes"added 1 changesets with 1 changes to 1 files (+1 heads)"(run 'hg heads' to see heads, 'hg merge' to merge)"

Page 24: GEL 1001 Design I (méthodologie)€¦ · Mercurial : développé comme un outil ligne de commande (dans un terminal)" hg version Mercurial Distributed SCM (version 1.4.2+20100104)

Conflits entre révisions"

Hiver 2011" GEL−1001 Design I (méthodologie)" 24"

hg heads!

changeset: 4:7e929321cade"tag: tip"parent: 2:710a9666f4a4"user: Christian Gagne <[email protected]>"date: Thu Jan 14 15:07:11 2010 -0500"summary: Le titre est change."

changeset: 3:f3b017a655f1"user: Christian Gagne <[email protected]>"date: Thu Jan 14 15:06:55 2010 -0500"summary: Modification au titre."

hg merge!

merging rapport/rapport_demo.tex"warning: conflicts during merge."merging rapport/rapport_demo.tex failed!"0 files updated, 0 files merged, 0 files removed, 1 files unresolved"use 'hg resolve' to retry unresolved file merges or 'hg update -C' to abandon"

Page 25: GEL 1001 Design I (méthodologie)€¦ · Mercurial : développé comme un outil ligne de commande (dans un terminal)" hg version Mercurial Distributed SCM (version 1.4.2+20100104)

Conflits entre révisions"

Hiver 2011" GEL−1001 Design I (méthodologie)" 25"

Page 26: GEL 1001 Design I (méthodologie)€¦ · Mercurial : développé comme un outil ligne de commande (dans un terminal)" hg version Mercurial Distributed SCM (version 1.4.2+20100104)

Commandes utiles"

 hg init : créer un nouveau projet" hg add : ajouter un fichier" hg rename : renommer un fichier" hg copy : copier un fichier" hg remove : retirer un fichier du dépôt" hg help : obtenir de lʼaide générale" hg help unecommande : obtenir de lʼaide sur

une commande spécifique"

Hiver 2011" GEL−1001 Design I (méthodologie)" 26"

Page 27: GEL 1001 Design I (méthodologie)€¦ · Mercurial : développé comme un outil ligne de commande (dans un terminal)" hg version Mercurial Distributed SCM (version 1.4.2+20100104)

Dépôts pour le cours"

 Trois dépôts dʼéquipes créés sur les serveurs du département"

 Dépôt du rapportssh://[email protected]//services/ GEL1001/equipeXX/hgroot/rapport"

 Dépôt de gestion ssh://[email protected]//services/ GEL1001/equipeXX/hgroot/gestion"

 Dépôt de présentation ssh://[email protected]//services/ GEL1001/equipeXX/hgroot/presentation"

Hiver 2011" GEL−1001 Design I (méthodologie)" 27"

Page 28: GEL 1001 Design I (méthodologie)€¦ · Mercurial : développé comme un outil ligne de commande (dans un terminal)" hg version Mercurial Distributed SCM (version 1.4.2+20100104)

Remise des travaux"  Chaque semaine, les assistants vont consulter vos

dépôts dʼéquipe"  Ordres du jour et procès-verbaux dans le dépôt de gestion"  Fichier Project de la planification des tâches dans le dépôt de

gestion"  État du rapport dans le dépôt du rapport"

  Remises des quatre versions du rapport comme bundle Mercurial dans Pixel"  hg bundle nomdubundle!  Remise du bundle à https://pixel.fsg.ulaval.ca"

Hiver 2011" GEL−1001 Design I (méthodologie)" 28"

Page 29: GEL 1001 Design I (méthodologie)€¦ · Mercurial : développé comme un outil ligne de commande (dans un terminal)" hg version Mercurial Distributed SCM (version 1.4.2+20100104)

Conclusion"

 Mercurial : outil puissant pour travail collaboratif et gestion des versions" Facilite le travail en équipe" Permet le retour en arrière" Décentralisé"

 Supporte les fichiers binaires, mais pertinent pour les fichiers contenant du texte" Html, XML, LaTeX, C++, Java, Python, etc. " Les différences entre les fichiers binaires ne

peuvent pas être visualisées"

Hiver 2011" GEL−1001 Design I (méthodologie)" 29"

Page 30: GEL 1001 Design I (méthodologie)€¦ · Mercurial : développé comme un outil ligne de commande (dans un terminal)" hg version Mercurial Distributed SCM (version 1.4.2+20100104)

Références"

 Mercurial : The Definite Guide par Bryan OʼSullivan" http://hgbook.red-bean.com"

 Tutoriel sur Mercurial" http://mercurial.selenic.com/wiki/Tutorial"

 Site Web de Mercurial" http://mercurial.selenic.com"

Hiver 2011" GEL−1001 Design I (méthodologie)" 30"

Page 31: GEL 1001 Design I (méthodologie)€¦ · Mercurial : développé comme un outil ligne de commande (dans un terminal)" hg version Mercurial Distributed SCM (version 1.4.2+20100104)

Logiciels conseillés"

 Mercurial (toutes plateformes)" http://mercurial.selenic.com/downloads"

 TortoiseHg : interface graphique pour Windows et Linux" http://tortoisehg.bitbucket.org"

 Murky : interface graphique pour Mac OS X" http://bitbucket.org/snej/murky/wiki/Home"

Hiver 2011" GEL−1001 Design I (méthodologie)" 31"

Page 32: GEL 1001 Design I (méthodologie)€¦ · Mercurial : développé comme un outil ligne de commande (dans un terminal)" hg version Mercurial Distributed SCM (version 1.4.2+20100104)

Activation du compte"

 Pour activer votre compte informatique sur le réseau du département de génie électrique et de génie informatique (nécessaire une seule fois)" https://sechuron.gel.ulaval.ca/auth/nipmiseajour.php"

Hiver 2011" GEL−1001 Design I (méthodologie)" 32"