Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédente | |||
| mercurial [20/12/2006 22:10] – hg add bug | mercurial [20/12/2006 22:41] (Version actuelle) – Complément sur rename, revert, rollback, etc. bug | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| + | ~~NOTOC~~ | ||
| + | |||
| + | ====== Crash course mercurial ====== | ||
| + | |||
| + | \\ | ||
| + | |||
| + | ===== Création du dépôt ===== | ||
| + | |||
| + | <code bash> | ||
| + | [bug@tux]$ cd projet | ||
| + | [bug@tux: | ||
| + | </ | ||
| + | |||
| + | À partir de ce moment là, mercurial dispose du nécessaire pour consigner les changements apportés aux sources. | ||
| + | |||
| + | |||
| + | ===== Consignation des modifications dans le dépôt ===== | ||
| + | |||
| + | <code bash> | ||
| + | [bug@tux]$ hg commit | ||
| + | </ | ||
| + | |||
| + | Permet d' | ||
| + | |||
| + | <code bash> | ||
| + | [bug@tux: | ||
| + | </ | ||
| + | |||
| + | |||
| + | ===== Historique du dépôt ===== | ||
| + | |||
| + | '' | ||
| + | |||
| + | Affiche l' | ||
| + | |||
| + | <code bash> | ||
| + | [bug@tux: | ||
| + | changeset: | ||
| + | tag: tip | ||
| + | user: bug | ||
| + | date: Thu Oct 19 22:44:18 2006 +0200 | ||
| + | summary: | ||
| + | |||
| + | changeset: | ||
| + | user: autre@tux.u-strasbg.fr | ||
| + | date: Thu Oct 19 21:02:24 2006 +0200 | ||
| + | summary: | ||
| + | |||
| + | changeset: | ||
| + | user: Dave Nul < | ||
| + | date: Wed Oct 18 22:05:41 2006 +0200 | ||
| + | summary: | ||
| + | ... | ||
| + | </ | ||
| + | |||
| + | Pour limiter l' | ||
| + | |||
| + | |||
| + | ===== Ajout, suppression, | ||
| + | |||
| + | '' | ||
| + | |||
| + | <code bash> | ||
| + | [bug@tux: | ||
| + | ? style.css | ||
| + | [bug@tux: | ||
| + | [bug@tux: | ||
| + | [bug@tux: | ||
| + | [bug@tux: | ||
| + | [bug@tux: | ||
| + | [bug@tux: | ||
| + | </ | ||
| + | |||
| + | |||
| + | ===== Etat du dépôt ===== | ||
| + | |||
| + | '' | ||
| + | |||
| + | Permet de voir dans quel état sont les sources du point de vue de mercurial. Exemple : | ||
| + | |||
| + | <code bash> | ||
| + | [bug@tux: | ||
| + | M index.html | ||
| + | ? search.patch | ||
| + | </ | ||
| + | |||
| + | Le fichier index.html est sous contrôle de mercurial et son état est M(odified), donc il a été modifié depuis la dernière consignation dans le dépôt (// | ||
| + | |||
| + | <code bash> | ||
| + | [bug@tux: | ||
| + | [bug@tux: | ||
| + | M index.html | ||
| + | A search.patch | ||
| + | [bug@tux: | ||
| + | </ | ||
| + | |||
| + | |||
| + | ===== Différences avec le dépôt ===== | ||
| + | |||
| + | '' | ||
| + | |||
| + | <code bash> | ||
| + | [bug@tux: | ||
| + | diff -r a0a00f7ed15a index.html | ||
| + | --- a/ | ||
| + | +++ b/ | ||
| + | @@ -10,10 +10,10 @@ Morbi et dui. Sed tellus elit, volutpat | ||
| + | Morbi et dui. Sed tellus elit, volutpat a, dignissim nec, | ||
| + | | ||
| + | | ||
| + | -erat. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. | ||
| + | +erat. Lorem ipsum dilor sit amet, consectetuer adipiscing elit. | ||
| + | enim. | ||
| + | |||
| + | -Nulla viverra sem nec erat. Fusce laoreet libero vel ante. Mauris | ||
| + | +Nulla viverra sem nic erot. Fusce laoreet libero vel ante. Mauris | ||
| + | | ||
| + | vitae nisi convallis faucibus. Nunc molestie molestie. Quisque | ||
| + | | ||
| + | </ | ||
| + | |||
| + | |||
| + | ===== Restauration de l' | ||
| + | |||
| + | Pour restaurer le répertoire de travail dans le dernier état consigné dans le dépôt (//tip//), il existe la commande '' | ||
| + | |||
| + | Il peut aussi être nécessaire de restaurer le répertoire de travail dans un état antérieur. Par exemple : | ||
| + | |||
| + | <code bash> | ||
| + | [bug@tux: | ||
| + | 14844509ed21 | ||
| + | [bug@tux: | ||
| + | changeset: | ||
| + | tag: tip | ||
| + | user: bug | ||
| + | date: Thu Oct 19 22:44:18 2006 +0200 | ||
| + | summary: | ||
| + | |||
| + | changeset: | ||
| + | user: autre@tux.u-strasbg.fr | ||
| + | date: Thu Oct 19 21:02:24 2006 +0200 | ||
| + | summary: | ||
| + | |||
| + | changeset: | ||
| + | user: Dave Nul < | ||
| + | date: Wed Oct 18 22:05:41 2006 +0200 | ||
| + | summary: | ||
| + | ... | ||
| + | </ | ||
| + | |||
| + | Pour restaurer le répertoire de travail dans l' | ||
| + | |||
| + | <code bash> | ||
| + | [bug@tux: | ||
| + | 248fd23b2247 | ||
| + | </ | ||
| + | |||
| + | |||
| + | ===== Branche et mainline ===== | ||
| + | |||
| + | Mercurial étant un SCM/VCS distribué, tout dépôt est une branche. La méthode la plus simple pour créer une nouvelle branche consiste à copier (cloner) un dépôt existant. Par exemple : | ||
| + | |||
| + | <code bash> | ||
| + | [bug@tux: | ||
| + | [bug@tux]$ hg clone projet projet-test-branch | ||
| + | </ | ||
| + | |||
| + | Par la suite, pour synchroniser la " | ||
| + | |||
| + | Dans un dépôt la commande '' | ||
| + | |||
| + | |||
| + | ===== Fichier de configuration ===== | ||
| + | |||
| + | Le fichier '' | ||
| + | |||
| + | < | ||
| + | [ui] | ||
| + | username = Alice < | ||
| + | |||
| + | [web] | ||
| + | contact = Alice | ||
| + | allowgz = true | ||
| + | allowbz2 = true | ||
| + | allowzip = true | ||
| + | style = gitweb | ||
| + | |||
| + | [extensions] | ||
| + | hgext.mq= | ||
| + | hgext.hbisect= | ||
| + | hgext.hgk= | ||
| + | hgext.patchbomb= | ||
| + | </ | ||
| + | |||
| + | Dans chaque dépôt, les valeurs de ces variables peuvent être surchargées via un fichier local '' | ||
| + | |||
| + | |||
| + | ===== Communiquer les changements ===== | ||
| + | |||
| + | Alice et Robert souhaitent coordonner leur travail sur un projet commun placé sous contrôle de Mercurial. Alice dispose du dépôt primaire (localisé dans / | ||
| + | |||
| + | ==== Accès local ==== | ||
| + | |||
| + | Robert travaillant sur la même machine qu' | ||
| + | |||
| + | <code bash> | ||
| + | [robert@tux: | ||
| + | [robert@tux: | ||
| + | changeset: | ||
| + | tag: tip | ||
| + | user: alice | ||
| + | date: Thu Oct 19 22:44:18 2006 +0200 | ||
| + | summary: | ||
| + | </ | ||
| + | |||
| + | Il peut maintenant modifier le projet puis envoyer ses // | ||
| + | |||
| + | <code bash> | ||
| + | [robert@tux: | ||
| + | [robert@tux: | ||
| + | adding changesets | ||
| + | adding manifests | ||
| + | adding file changes | ||
| + | added 1 changesets with 1 changes to 1 files | ||
| + | </ | ||
| + | |||
| + | Si Robert ne peut écrire dans le dépôt d' | ||
| + | |||
| + | ==== Accès réseaux en lecture seule ==== | ||
| + | |||
| + | Le dépôt d' | ||
| + | |||
| + | <code bash> | ||
| + | [alice@tux: | ||
| + | ... | ||
| + | [robert@tux: | ||
| + | [robert@tux: | ||
| + | changeset: | ||
| + | tag: tip | ||
| + | user: alice | ||
| + | date: Thu Oct 19 22:44:18 2006 +0200 | ||
| + | summary: | ||
| + | </ | ||
| + | |||
| + | Robert transmettra ensuite ses modifications par '' | ||
| + | |||
| + | Alice peut aussi opter pour offrir un accès HTTP permanent à son dépôt (sans avoir à lancer la commande '' | ||
| + | |||
| + | <code bash> | ||
| + | [alice@tux: | ||
| + | [alice@tux: | ||
| + | [alice@tux: | ||
| + | ... | ||
| + | [robert@tux: | ||
| + | [robert@tux: | ||
| + | changeset: | ||
| + | tag: tip | ||
| + | user: alice | ||
| + | date: Thu Oct 19 22:44:18 2006 +0200 | ||
| + | summary: | ||
| + | </ | ||
| + | |||
| + | ==== Accès réseaux en écriture ==== | ||
| + | |||
| + | Alice décide que Robert peut écrire dans son dépôt Mercurial. Si Robert a un accès SSH sur la machine d' | ||
| + | |||
| + | <code bash> | ||
| + | [robert@tux: | ||
| + | [robert@tux: | ||
| + | changeset: | ||
| + | tag: tip | ||
| + | user: alice | ||
| + | date: Thu Oct 19 22:44:18 2006 +0200 | ||
| + | summary: | ||
| + | [robert@tux: | ||
| + | [robert@tux: | ||
| + | [robert@tux: | ||
| + | adding changesets | ||
| + | adding manifests | ||
| + | adding file changes | ||
| + | added 1 changesets with 1 changes to 1 files | ||
| + | [robert@tux: | ||
| + | </ | ||
| + | |||
| + | La commande '' | ||
| + | |||
| + | La même chose est réalisable via HTTP. Alice met en place un accès HTTP à son dépôt comme précédemment (en utilisant le CGI), puis : | ||
| + | |||
| + | * dans le fichier .hg/hgrc de son dépôt elle rajoute | ||
| + | < | ||
| + | allow_push = * | ||
| + | push_ssl = false | ||
| + | </ | ||
| + | * dans un fichier .htaccess de son dépôt elle rajoute | ||
| + | < | ||
| + | <Limit POST> | ||
| + | AuthType Digest | ||
| + | AuthName " | ||
| + | AuthUserFile / | ||
| + | require valid-user | ||
| + | </ | ||
| + | </ | ||
| + | * elle crée enfin le fichier .digestpw nécessaire avec un login et un mot de passe pour Robert. | ||
| + | |||
| + | Robert peut désormais récupérer le dépôt d' | ||
| + | |||
| + | ===== Annulation d'un commit ===== | ||
| + | |||
| + | Dans mercurial, l' | ||
| + | |||
| + | ===== Exportation d'une archive ===== | ||
| + | |||
| + | La distribution des sources d'un projet sous contrôle de mercurial peut être réalisée sous la forme d'un fichier archive (tar, tgz, tbz, zip) qui est fabriqué via une commande analogue à '' | ||
| + | |||
| + | ===== Nommer une revision ===== | ||
| + | |||
| + | Dans mercurial, chaque révision d'un dépôt est identifié par un compteur incrémenté à chaque //commit// et par un HASH : | ||
| + | |||
| + | <code bash> | ||
| + | [robert@tux: | ||
| + | changeset: | ||
| + | </ | ||
| + | |||
| + | Ce HASH est en réalité une version courte du HASH (SHA) réel utilisé pour identifié la révision dans le dépôt : | ||
| + | |||
| + | <code bash> | ||
| + | [robert@tux: | ||
| + | f066ae784d95f9730992036faa9cbb53a422b494 | ||
| + | </ | ||
| + | |||
| + | Il est aussi possible de donner un nom symbolique à une révision quelconque. Par exemple : | ||
| + | |||
| + | <code bash> | ||
| + | [robert@tux: | ||
| + | changeset: | ||
| + | [robert@tux: | ||
| + | </ | ||
| + | |||
| + | va associer à la révision 35 ou au // | ||
| + | |||
| + | <code bash> | ||
| + | [robert@tux: | ||
| + | </ | ||
| + | |||
| + | |||
| + | ===== Autres commandes utiles ===== | ||
| + | |||
| + | '' | ||
| + | '' | ||
| + | '' | ||
| + | '' | ||
| + | |||