Mercurial pour débutants: le guide pratique définitif

Inspiré par Git pour les débutants: The definitive guide pratique .

C'est une compilation d'informations sur l'utilisation de Mercurial pour "151970920 les" débutants pour pratique utilisation.

débutant-un programmeur qui a touché le contrôle source sans le comprendre très bien.

pratiques - couvrant les situations dans lesquelles la majorité des les utilisateurs rencontrent souvent-créer un dépôt, brancher, fusionner, tirer/pousser à partir/vers un dépôt distant, etc.

Notes :

  • expliquer comment obtenir quelque chose fait plutôt que comment quelque chose est mettre.
  • répondre à une question par réponse.
  • réponse claire et aussi concise que possible.
  • Modifier/étendre une réponse existant plutôt que de créer une nouvelle réponse sur le même sujet.
  • veuillez fournir un lien vers le Mercurial wiki ou le HG Book pour les gens qui veulent en savoir plus.

Questions:

Installation/Configuration

travaillant avec le code

Marquage, les branchements, les rejets, les lignes de base

autres

autres références Mercurielles

237
demandé sur Laz 2009-07-23 12:06:08
la source

22 ответов

Comment le configurer pour ignorer les fichiers?

Ignore est configuré dans un fichier texte normal appelé .hgignore à la racine de votre dépôt. Ajouter juste comme un fichier normal avec:

hg add .hgignore

il y a deux options de syntaxe disponibles pour l'appariement des fichiers, glob et regexp. glob est une extension de nom de fichier de type unix et regexp est une expression régulière. Vous activez chacun en ajoutant syntax: glob ou syntax: regexp sur une ligne par lui-même. Toutes les lignes suivant qui utilisera cette syntaxe, jusqu'au prochain marqueur de syntaxe. Vous pouvez avoir autant de marqueurs syntaxiques que vous voulez. La syntaxe par défaut est regexp, donc si vous n'utilisez que regexp, vous n'avez pas besoin de marqueur de syntaxe.

vous pouvez ajouter des commentaires avec #

exemple:

# python temporary files
syntax: glob
*.pyc

#editor autosaves
*~

# temporary data
syntax: regexp
temp

Ignore ne s'applique qu'aux fichiers non gérés (c.-à-d. les fichiers qui ne sont pas déjà enregistrés). Pour ignorer les fichiers sous contrôle de version, vous pouvez utiliser les commutateurs -I et-X.

16
répondu Joakim Lundborg 2009-07-23 19:22:52
la source

Comment voyez-vous ce qui est engagé, ou l'état de votre base de code?

pour voir la liste des fichiers qui ont été modifiés:

$ hg status

cette option permet d'imprimer chaque fichier qui a été modifié ainsi que son statut, qui peut inclure:

  • M - modifié. Le fichier a été modifié et les changements n'ont pas été commis.
  • A - ajouté. Fichier n'a pas été traqué avant, mais si vous commettez Mercurial commencera à le traquer.
  • R - supprimé. Le fichier a déjà été retracé, mais si vous commettez Mercurial cessera de le retracer dans ce fichier et les futures commits.
  • ? - inconnu. Le fichier N'est pas actuellement suivi par Mercurial. Commettre n'aura aucun effet sur elle, sauf si vous utilisez hg add pour l'ajouter.
  • ! - manquant. Le dossier a été retracé mais Mercurial ne peut pas le trouver dans la copie de travail.

pour voir les modifications qui ont été effectivement apportées aux fichiers:

$ hg diff
7
répondu Steve Losh 2009-07-24 00:08:48
la source

comment créer un nouveau projet / dépôt?

$ hg init my-repository
6
répondu 2009-07-23 12:10:10
la source

comment interfacer avec Subversion?

il y a trois façons:


le convert extension va cloner un dépôt Subversion existant en un dépôt mercuriel. Il est livré avec Mercurial. Cela fonctionne à peu près comme ceci:

hg convert <Subversion URL or directory> <path to new Mercurial repository>

par exemple, cela saisira le tronc du dépôt sixapart memcached.

hg convert http://code.sixapart.com/svn/memcached/trunk

le l'extension peut introduire progressivement de nouvelles révisions à partir d'un dépôt Subversion dans le dépôt mercuriel (un peu comme pull). Cependant, il ne supporte pas de prendre des révisions Mercurielles et de les renvoyer vers Subversion (no push). [XXX: corriger s'il est erroné] .


Le hgsubversion extension . C'est à bien des égards la solution la plus sophistiquée car elle utilise L'API Subversion pour communiquer avec le dépôt Subversion. Il vise à devenir le HG-SVN pont. Il permet de contourner complètement les révisions (clone complet, pull, et push), cependant à partir de cet écrit [XXX: modifier ceci si/quand il devient incorrect] il est encore en développement et il n'y a pas encore de versions officielles. En conséquence, il ne fonctionne qu'avec le Mercurial le plus à jour (1.3 À partir de cette écriture).

  • Il cartes étiquettes et branches (précédant toutes les étiquettes avec tags/ pour les distinguer des branches nommées de façon équivalente).
  • il maintient une branche spéciale closed-branches pour fermer les branches qui sont enlevées dans Subversion.
  • Il exige que le dépôt Subversion être établies conformément à la convention de trunk/branches/tags.
  • l'ensemble de commande est typiquement hg svn <subcommand> bien qu'il vise à être intégré au point que vous n'avez pas besoin de la partie 'svn' (c'est-à-dire qu'il veut traiter un clone Subversion autant que possible comme n'importe quel autre dépôt mercuriel).;

Il fonctionne comme ceci:

clone:

hg svnclone <Subversion URL> 

ou (seulement pour svn:// URLs)

hg clone <svn:// URL>

tire:

hg svn pull

push:

hg svn push

:

hg svn incoming

sortant:

hg svn outgoing

vérification d'un dépôt complet:

hg svnclone http://code.sixapart.com/svn/memcached

Le hgsvn utilitaire ( bitbucket arbre ). Jusqu'à récemment, cela ne permettait que de cloner et de tirer un dépôt Subversion, mais à partir de hgsvn 0.1.7 il supporte push. [Je ne sais pas comment bien il le fait de repousser. N'importe qui avec plus d'expérience devrait le mettre à jour.] Elle présente les caractéristiques notables suivantes:

  • il génère une étiquette mercurielle pour chaque étiquette SVN.
  • il met un Local étiquette sur chaque changeset pour marquer sa révision SVN.
  • il place chaque révision Mercuriale sur une branche nommée d'après sa branche SVN. Par exemple branches/some-feature serait comme hg branch some-feature . Il met l' trunk sur trunk (c'est-à-dire que rien ne se trouve sur la branche par défaut de Mercurial, à moins que l'utilisateur n'y commute explicitement.)
  • il va essayer d'identifier les branches et les étiquettes, et de les créer, mais si elle ne peut pas il les saute juste. C'est pratique lorsque le dépôt Subversion ne suit pas la disposition conventionnelle du tronc/branches/tags.

Il fonctionne comme ceci:

clone:

hgimportsvn <Subversion URL>

pull:

hgpullsvn

push:

hgpushsvn

entrant:

hgpullsvn -n

sortant:

hgpushsvn -n

vérification d'un dépôt complet:

hgimportsvn http://code.sixapart.com/svn/memcached

Vérifier juste le tronc:

hgimportsvn http://code.sixapart.com/svn/memcached/trunk
5
répondu quark 2009-08-19 04:15:25
la source

comment comparer deux révisions d'un fichier, ou votre fichier actuel et une révision précédente?

utiliser hg diff . Lorsque hg diff est utilisé, toutes les modifications dans la copie de travail et la pointe (la dernière propagation) est affichée.

pour "comment comparer deux révisions d'un fichier?"

$ hg diff -r{rev1} -r{rev2} {file.code}

la commande ci-dessus affichera différent entre rev1 et rev2 de" file.code."

pour " How do you comparer votre fichier actuel avec une révision précédente?"

$ hg diff {file.code}

la commande ci-dessus affichera différent entre la version actuelle de" file.code" et la dernière révision (la plus performante).

: d

5
répondu NawaMan 2009-09-12 00:15:18
la source

comment "marquer "' tag 'ou' release ' un ensemble particulier de révisions pour un ensemble particulier de fichiers de sorte que vous pouvez toujours tirer celui-ci plus tard?

$ hg tag my-tag

vous pouvez également cloner votre dépôt pour créer un dépôt spécial tag .

$ hg clone working-repository my-tag-repository
4
répondu 2009-07-23 16:41:01
la source

comment vous branchez-vous?

$ hg direction de la ma-branche

ou

$ hg clone original-référentiel ma-branche

bien qu'il soit à noter que branch crée un répertoire" virtuel "(c.-à-d., les fichiers restent les mêmes, mais hg les traite comme s'ils étaient différents à l'intérieur du système), tandis que clone crée une copie réelle et complète. Strictement parlant, clone ne se ramifie pas.

4
répondu Nick Hodges 2010-12-11 00:55:53
la source

bon GUI/IDE plugin pour Mercurial?

GUI

  • TortoiseHg pour à peu près n'importe quel OS. Inclut l'intégration de Windows Explorer. Il fonctionne également sous Linux et sur quelques autres OS:es, dont Max OS X. Il possède une interface assez lourde et est un peu difficile à utiliser au début, mais il est très complet et puissant.
  • Murky fonctionne sur Mac OS X 10.5 ou plus tard. Trouble est bon pour explorer le référentiel et les commandes de base, mais vous aurez besoin de savoir comment utiliser la ligne de commande.
  • MacHg est un GUI Mac OS X agréable qui a un peu plus de fonctionnalité et de polissage que Murky, mais vous aurez encore besoin de la ligne de commande avec elle aussi.
  • SourceTree est un client Mac à l'origine, avec une version Windows disponible tout récemment. Assez agréable UI (au moins sur OS X), prend en charge la majorité des caractéristiques de Hg, y compris les rayonnages.

Plugins

4
répondu Macke 2013-04-19 11:42:40
la source

comment commettez-vous des changements?

invoquer cette commande à partir du local actuel * dépôt mercurial

hg commit [OPTION]... [FILE]...

alias: ci

  • un dépôt mercuriel local a .hg dans le répertoire courant

Où l'option peut être:

 -A --addremove     mark new/missing files as added/removed before committing
    --close-branch  mark a branch as closed, hiding it from the branch list
 -I --include       include names matching the given patterns
 -X --exclude       exclude names matching the given patterns
 -m --message       use <text> as commit message
 -l --logfile       read commit message from <file>
 -d --date          record datecode as commit date
 -u --user          record user as committer

exemple de commande:

hg commit -m "added readme" README

NOTES :

  • si une liste de fichiers est omise, tous les changements signalés par "HG status" seront commis.
  • si vous propagez le résultat d'une fusion, ne donnez pas de noms de fichiers ou de filtres-I/-X.
  • si aucun message de propagation n'est spécifié, l'éditeur configuré est lancé pour vous demander un message.
3
répondu jpartogi 2009-09-07 05:53:56
la source

comment configurer Mercurial?

Mercurial stocke ses informations de configuration dans ~/.hgrc on * nix systems et dans %UserProfile%\mercurial.ini on Windows systems. ( %UserProfile% est typiquement "C:\Documents and Settings\[username]\" sur les systèmes Windows 2000 ou Windows XP, et typiquement C:\Users\[username]\ sur les systèmes Windows Vista et Windows 7.)

comme point de départ, vous devez définir votre nom D'utilisateur mercuriel en plaçant ce qui suit dans votre .hgrc ou mercurial.ini :

# This is a Mercurial configuration file.
[ui]
username = Firstname Lastname <[email protected]>

TortoiseHg utilisateurs sur les systèmes de Windows peuvent alternativement exécuter hgtk userconfig

Voir aussi " création d'un fichier de configuration Mercurial dans chapitre 2 de" Mercurial: The Definitive Guide ."

3
répondu las3rjock 2009-09-10 00:55:29
la source

comment fusionner les branches?

$ cd repository-where-i-want-to merge
$ hg pull branch-i-want-to-merge
$ hg merge # if necessary
3
répondu Martin Geisler 2009-09-12 00:18:18
la source

comment installer Mercurial?

veuillez éditer correctement si vous avez installé depuis la source sur Linux, ou si vous avez utilisé les installateurs Windows.

Mac OS X 10.4 (Tigre), 10.5 (léopard)

utilisez easy_install de Python (avec Setuptools ):

sudo easy_install mercurial

trouve la dernière version (1.3.1 au moment de la rédaction) et installe à:

/Library/Frameworks/Python.framework/Versions/2.6/bin/

Avec Python 2.6 ceci fait également le tour du paquet de L'installateur Mercurial OS X (au 1.2.1 depuis le 26 juillet 2009) en se plaignant qu'il a besoin de Python 2.5. De la documentation , il apparaît que Fink et Macports installent la version 1.2.

Linux

la plupart des paquets Linux explicites semblent être en retard sur la version actuelle, donc utilisez easy_install (comme ci-dessus) ou téléchargez le Mercurial tarball , extraire l'archive, changer pour le répertoire mercurial, et exécuter:

$ make
$ sudo make install    # do a system-wide install
$ hg debuginstall      # sanity check
$ hg                   # see help

(de Introduction des Mercurial, un système de contrôle de version distribué )

Windows

il y a un paquet binaire de la dernière version de Mercurial . TortoiseHg est une extension de Windows shell pour, et installe, Mercurial. Cygwin peut également installer Mercurial.

alternativement (instructions trop longues ainsi liées ici), vous pouvez construire une version optimisée ou Python pur version de Mercurial à partir de la source.

3
répondu Dave Everitt 2011-04-18 17:23:21
la source

Comment obtenir le dernier code?

Mercurial se souvient de l'endroit où un dépôt a été cloné (in .hg / hgrc) de sorte que vous pouvez simplement exécuter:

hg pull

pour extraire le dernier code de origin-repository. (Ceci ne met pas à jour le répertoire de travail)

hg update

pour mettre à jour le répertoire de travail.

hg pull -u

pour effectuer à la fois un pull et une mise à jour à la fois.

3
répondu Laz 2011-10-09 03:47:01
la source

Comment vérifier le code?

hg clone [OPTION]... SOURCE [DEST]

Où l'option peut être:

 -U --noupdate      the clone will only contain a repository (no working copy)
 -r --rev           a changeset you would like to have after cloning
    --pull          use pull protocol to copy metadata
    --uncompressed  use uncompressed transfer (fast over LAN)
 -e --ssh           specify ssh command to use
    --remotecmd     specify hg command to run on the remote side

où source est la source des fichiers originaux situés dans le dépôt, où il peut s'agir d'un URL ou d'un répertoire de système de fichiers. Par exemple:

et la destination est l'endroit où le code source sera localisé dans votre système de fichiers local.

3
répondu jpartogi 2012-09-09 16:49:43
la source

comment commettez-vous des changements?

$ hg commit -m "Commit message"
1
répondu NawaMan 2009-10-11 23:41:33
la source

Comment voyez-vous quelles modifications seront envoyées au dépôt amont lorsque vous poussez?

utilisez hg outgoing pour obtenir la liste des changesets qui seront placés dans le dépôt par défaut:

$ hg outgoing

pour obtenir les changements de code réels, utilisez -p ( --patch ). Cela permettra d'afficher chaque changement dans son intégralité:

$ hg outgoing -p
1
répondu robotadam 2009-10-11 23:52:55
la source

Comment supprimer un fichier du dépôt?

pour supprimer un fichier du dépôt, et le faire supprimer lors de la prochaine propagation:

$ hg remove {file(s)}

pour supprimer un fichier du dépôt, mais ne pas le faire supprimer

$ hg remove -Af {file(s)}

ou de Mercurial 1.3

$ hg forget {file(s)}
1
répondu David Sykes 2010-04-16 14:02:09
la source

comment revenir à une version précédente du code?

à Partir de cette question

$ hg update [-r REV]

@van: si vous vous engagez plus tard, vous créerez effectivement une nouvelle branche. Vous pourriez alors continuer à travailler uniquement sur cette branche ou éventuellement y fusionner la branche existante.

1
répondu David Sykes 2017-05-23 14:55:06
la source

Comment réinitialiser un jeu de modifications?

quelques options disponibles

Voie Facile (rejeter un seul changement)

$ hg backout -m 'back out second change' tip
reverting myfile
changeset 2:01adc4672142 backs out changeset 1:7e341ee3be7a
$ cat myfile
first change

dur (appliquer et différencier manuellement)

Étape 1 : créer un fichier de correctifs pour revenir sur ce qui a changé entre la révision 107 et 108:

hg diff -r107 -r108 --reverse  > revert-change.patch

(alternativement, hg diff -r108 -r107 sans --reverse fera la même chose)

Étape 2 : appliquer le patch file:

patch -p1 < revert-change.patch

certaines différences peuvent ne pas s'appliquer, par exemple:

Hunk #3 FAILED at 517.
1 out of 3 hunks FAILED -- saving rejects to file 'foo/bar.c.rej'

The .rej fichier contiendra le contenu de la diff qui n'a pas appliqué, vous aurez besoin d'un coup d'oeil.

1
répondu slf 2010-10-28 19:11:30
la source

Comment voyez-vous l'historique des révisions d'un fichier ou d'un référentiel?

pour afficher l'historique des révisions du ou des fichiers complets

$ hg log {file(s)}

ou

$ hg history {file(s)}

et à voir la liste dans l'ordre inverse

$ hg log -r:
1
répondu David Sykes 2017-05-23 14:55:06
la source

comment fusionner des parties d'une branche en une autre?

activez l'extension' transplant ' dans votre .hg / hgrc

[extensions]
transplant=

chargez la branche cible puis transplantez la révision cible.

par exemple: cherry pick révision 81 à partir de la branche " foo " dans le courant de la branche

$ hg transplant -b foo 81
1
répondu John Mee 2010-11-24 09:33:42
la source

comment extraire un patch d'un jeu de modifications spécifique?

$ hg export -o patchfile changeset

vous pouvez ensuite importer ceci dans une autre branche avec:

$ hg import patchfile
1
répondu David Sykes 2011-10-12 17:15:46
la source

Autres questions sur version-control mercurial