Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
mercurial [20/12/2006 22:10]
bug hg add
mercurial [20/12/2006 22:41] (Version actuelle)
bug Complément sur rename, revert, rollback, etc.
Ligne 14: Ligne 14:
 À partir de ce moment là, mercurial dispose du nécessaire pour consigner les changements apportés aux sources. À 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
 +</​code>​
 +
 +Permet d'​enregistrer les modifications des fichiers sous contrôle de mercurial, dans le dépôt. La variante ''​hg commit -m "​commit message"''​ permet de passer directement le commentaire à enregistrer (s'il est court) dans l'​historique des modifications du dépôt pour ce //commit//. Exemple :
 +
 +<code bash>
 +[bug@tux:​~projet/​ ]$ hg ci -m "​Correction bug #23"
 +</​code>​
 +
 +
 +===== Historique du dépôt =====
 +
 +''​hg log''​
 +
 +Affiche l'​historique des consignations (//​commits//​) dans le dépôt. Par exemple :
 +
 +<code bash>
 +[bug@tux:​~projet/​ ]$ hg log
 +changeset: ​  ​35:​14844509ed21
 +tag:         tip
 +user:        bug
 +date:        Thu Oct 19 22:44:18 2006 +0200
 +summary: ​    ​Correction bug #23
 +
 +changeset: ​  ​34:​25845386fc92
 +user:        autre@tux.u-strasbg.fr
 +date:        Thu Oct 19 21:02:24 2006 +0200
 +summary: ​    Ajout blablabla
 +
 +changeset: ​  ​33:​248fd23b2247
 +user:        Dave Nul <​devnull@tux>​
 +date:        Wed Oct 18 22:05:41 2006 +0200
 +summary: ​    ​Accord incertain
 +...
 +</​code>​
 +
 +Pour limiter l'​historique aux N derniers //​commits//,​ utiliser ''​hg log -l <​N>''​
 +
 +
 +===== Ajout, suppression,​ déplacement de fichiers =====
 +
 +''​hg add <​fichier>'',​ ''​hg remove <​fichier>''​ ''​hg rename <​ancien-nom>​ <​nouveau-nom>''​ permettent respectivement d'​ajouter,​ de supprimer et de renommer un fichier du dépôt. Comme dans tout SCM/VCS, l'​action est enregistrée mais sera effectuée au prochain //commit//. Exemple
 +
 +<code bash>
 +[bug@tux:​~projet/​ ]$ hg st
 +? style.css
 +[bug@tux:​~projet/​ ]$ hg add style.css
 +[bug@tux:​~projet/​ ]$ hg ci -m "Ajout du CSS"
 +[bug@tux:​~projet/​ ]$ hg remove file.old
 +[bug@tux:​~projet/​ ]$ hg ci -m "​Suppression fichier inutilisé"​
 +[bug@tux:​~projet/​ ]$ hg rename afile thefile
 +[bug@tux:​~projet/​ ]$ hg ci -m "afile devait s'​appeler thefile"​
 +</​code>​
  
  
Ligne 28: Ligne 85:
 </​code>​ </​code>​
  
-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 (//​commit//​). Le fichier search.patch est inconnu (d'où le ?) de mercurial. Pour indiquer à mercurial qu'il doit aussi contrôler les modifications faites sur le fichier search.patch,​ il faut l'​ajouter au dépôt mercurial (et commiter ​cet ajout) :+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 (//​commit//​). Le fichier search.patch est inconnu (d'où le ?) de mercurial. Pour indiquer à mercurial qu'il doit aussi contrôler les modifications faites sur le fichier search.patch,​ il faut l'​ajouter au dépôt mercurial (et consigner ​cet ajout) :
  
 <code bash> <code bash>
Ligne 64: Ligne 121:
  
  
-===== Consignation des modifications dans le dépôt ​=====+===== Restauration de l'​état du projet ​=====
  
-''​hg ​commit''​+Pour restaurer le répertoire de travail dans le dernier état consigné dans le dépôt (//tip//), il existe la commande ​''​hg ​revert''​. Celle-ci efface toutes les modifications qui ont été faites dans les fichiers sources et qui n'ont pas été consignées dans le dépôt.
  
-Permet d'​enregistrer les modifications des fichiers sous contrôle ​de mercurial, dans le dépôt. La variante ''​hg commit -m "​commit message"''​ permet ​de passer directement le commentaire à enregistrer (s'il est court) ​dans l'​historique des modifications du dépôt pour ce //commit//. Exemple : +Il peut aussi être nécessaire ​de restaurer ​le répertoire ​de travail ​dans un état antérieur. Par exemple :
- +
-<code bash> +
-[bug@tux:​~projet/​ ]$ hg ci -m "​Correction bug #23" +
-</​code>​ +
- +
- +
-===== Historique du dépôt ===== +
- +
-''​hg log''​ +
- +
-Affiche l'​historique des consignations (//​commits//​) dans le dépôt. Par exemple :+
  
 <code bash> <code bash>
 +[bug@tux:​~projet/​ ]$ hg id
 +14844509ed21
 [bug@tux:​~projet/​ ]$ hg log [bug@tux:​~projet/​ ]$ hg log
 changeset: ​  ​35:​14844509ed21 changeset: ​  ​35:​14844509ed21
Ligne 101: Ligne 149:
 </​code>​ </​code>​
  
-Pour limiter l'​historique aux N derniers //​commits//,​ utiliser ''​hg log -l <​N>''​ +Pour restaurer le répertoire ​de travail ​dans l'état dans lequel il se trouvait ​au moment du //changeset// 33, une seule commande est nécessaire :
- +
- +
-===== Ajout et suppression ​de fichiers ===== +
- +
-''​hg add <​fichier>''​ et ''​hg remove <​fichier>''​ permettent respectivement d'​ajouter et de supprimer un fichier du dépôt. Comme dans tout SCM/​VCS, ​l'action est enregistrée mais sera effectuée ​au prochain ​//commit//. Exemple+
  
 <code bash> <code bash>
-[bug@tux:​~projet/​ ]$ hg st +[bug@tux:​~projet/​ ]$ hg update ​-C 33 
-? style.css +248fd23b2247
-[bug@tux:​~projet/​ ]$ hg add style.css +
-[bug@tux:​~projet/​ ]$ hg ci -m "Ajout du CSS" +
-[bug@tux:​~projet/​ ]$ hg remove file.old +
-[bug@tux:​~projet/​ ]$ hg ci -m "​Suppression fichier inutilisé"​+
 </​code>​ </​code>​
  
Ligne 129: Ligne 168:
 Par la suite, pour synchroniser la "​branche"​ projet-test-branch avec sa source, il suffit de lancer ''​hg pull''​ pour récupérer les modifications de la source, suivi d'un ''​hg update''​ pour appliquer aux données dans la branche les modifications récupérées par pull. Par la suite, pour synchroniser la "​branche"​ projet-test-branch avec sa source, il suffit de lancer ''​hg pull''​ pour récupérer les modifications de la source, suivi d'un ''​hg update''​ pour appliquer aux données dans la branche les modifications récupérées par pull.
  
-Dans un dépôt la commande ''​hg tip''​ permet de connaître le changeset le plus récent, ''​hg id''​ indique à quel changeset se situe le répertoire de travail et ''​hg parents''​ montre le changeset parent du répertoire de travail. Si le répertoire de travail courant (et donc le dépôt qu'il contient) a été cloné depuis un autre dépôt, les commandes ''​hg in''​ et ''​hg out''​ montrent respectivement les modifications du dépôt source qui n'ont pas été incluses dans le dépôt local et les modifications du dépôt local qui n'ont pas été envoyées vers le dépôt source.+Dans un dépôt la commande ''​hg tip''​ permet de connaître le //changeset// le plus récent, ''​hg id''​ indique à quel //changeset// se situe le répertoire de travail et ''​hg parents''​ montre le //changeset// parent du répertoire de travail. Si le répertoire de travail courant (et donc le dépôt qu'il contient) a été cloné depuis un autre dépôt, les commandes ''​hg in''​ et ''​hg out''​ montrent respectivement les modifications du dépôt source qui n'ont pas été incluses dans le dépôt local et les modifications du dépôt local qui n'ont pas été envoyées vers le dépôt source.
  
  
Ligne 266: Ligne 305:
 Robert peut désormais récupérer le dépôt d'​Alice (''​hg clone''​ et ''​hg pull''​ par la suite pour le mettre à jour) et y injecter ses modifications (''​hg push''​). Robert peut désormais récupérer le dépôt d'​Alice (''​hg clone''​ et ''​hg pull''​ par la suite pour le mettre à jour) et y injecter ses modifications (''​hg push''​).
    
 +===== Annulation d'un commit =====
 +
 +Dans mercurial, l'​historique d'un projet est inviolable (le format des fichiers du dépôt est « append-only »). Seul le dernier //commit// qui a été effectué peut-être annulé, via la commande ''​hg rollback''​.
 +
 +===== 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 à ''​hg archive -t tgz src.tgz''​.
 +
 +===== 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:​~projet/​ ]$ hg tip -q
 +changeset: ​  ​35:​f066ae784d95
 +</​code>​
 +
 +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:​~projet/​ ]$ hg tip --template '​{node}'​
 +f066ae784d95f9730992036faa9cbb53a422b494
 +</​code>​
 +
 +Il est aussi possible de donner un nom symbolique à une révision quelconque. Par exemple :
 +
 +<code bash>
 +[robert@tux:​~projet/​ ]$ hg tip -q
 +changeset: ​  ​35:​f066ae784d95
 +[robert@tux:​~projet/​ ]$ hg tag RELEASE-1.1
 +</​code>​
 +
 +va associer à la révision 35 ou au //​changeset//​ f066ae784d95 le nom symbolique **RELEASE-1.1**. Pour restaurer le répertoire de travail dans l'​état où il se trouvait à la révision 35, il est aussi possible d'​utiliser le nom associé à cette révision :
 +
 +<code bash>
 +[robert@tux:​~projet/​ ]$ hg update RELEASE-1.1
 +</​code>​
 +
  
 ===== Autres commandes utiles ===== ===== Autres commandes utiles =====
Ligne 271: Ligne 348:
 ''​hg branch''​ : crée ou montre la branche courante du dépôt \\ ''​hg branch''​ : crée ou montre la branche courante du dépôt \\
 ''​hg annotate''​ : affiche quel changeset a modifié quelle ligne \\ ''​hg annotate''​ : affiche quel changeset a modifié quelle ligne \\
-''​hg archive''​ : crée une archive (tar ou zip) d'un dépôt \\ 
-''​hg tag''​ : crée un nom symbolique pour une révision \\ 
-''​hg revert''​ : restaure le dépôt vierge de modification \\ 
-''​hg rename <​ancien-nom>​ <​nouveau-nom''​ : permet de renommer le fichier <​ancien-nom>​ du dépôt \\  
-''​hg rollback''​ : permet d'​annuler le dernier commit qui a été effectué \\  
 ''​hg help''​ : les autres commandes de mercurial ''​hg help''​ : les autres commandes de mercurial
 ''​man hg''​ et ''​man hgrc''​ ''​man hg''​ et ''​man hgrc''​