Inspiré par Git pour les débutants: le guide pratique définitif .
Ceci est une compilation d'informations sur l'utilisation de Mercurial pour débutants pour pratiques .
Débutant - un programmeur qui a touché au contrôle de source sans très bien le comprendre.
Pratique - couvre les situations que rencontrent souvent la majorité des utilisateurs - créer un référentiel, créer des branches, fusionner, extraire/pousser de/vers un référentiel distant, etc.
Notes :
- Expliquez comment faire quelque chose plutôt que comment quelque chose est mis en œuvre.
- Traitez une question par réponse.
- Répondez clairement et de la manière la plus concise possible.
- Modifiez/étendez une réponse existante 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 personnes qui souhaitent en savoir plus.
Des questions:
Ignorer est configuré dans un fichier texte normal appelé .hgignore à la racine de votre référentiel. Ajoutez-le comme un fichier normal avec:
hg add .hgignore
Il existe deux options de syntaxe disponibles pour la correspondance de fichiers, glob et regexp. glob est une extension de nom de fichier semblable à Unix et regexp est une expression régulière. Vous activez chacun en ajoutant syntax: glob
ou syntax: regexp
sur une ligne à part. Toutes les lignes suivantes qui utiliseront cette syntaxe, jusqu'au prochain marqueur de syntaxe. Vous pouvez avoir autant de marqueurs de syntaxe que vous le souhaitez. La syntaxe par défaut est regexp. Par conséquent, si vous n'utilisez que regexp, vous n'avez besoin d'aucun marqueur de syntaxe.
Vous pouvez ajouter des commentaires avec #
Exemple:
# python temporary files
syntax: glob
*.pyc
#editor autosaves
*~
# temporary data
syntax: regexp
temp
Ignorer s’applique uniquement aux fichiers non gérés (c’est-à-dire aux fichiers qui ne sont pas déjà archivés). Pour ignorer les fichiers sous contrôle de version, vous pouvez utiliser les commutateurs -I et -X.
Pour voir une liste des fichiers qui ont été modifiés:
$ hg status
Cela imprimera chaque fichier modifié avec son statut, ce qui peut inclure:
M
- Modifié. Le fichier a été modifié et les modifications n'ont pas été validées.A
- Ajouté. Le fichier n'a pas été suivi auparavant, mais si vous validez, Mercurial commencera à le suivre.R
- Supprimé. Le fichier avait déjà été suivi, mais si vous validez, Mercurial cessera de le suivre dans cette version et dans les futures.?
- Inconnu. Le fichier n'est actuellement pas suivi par Mercurial. S'engager n'aura d'effet que si vous utilisez hg add
pour l'ajouter.!
- Manquant. Le fichier a été suivi, mais Mercurial ne le trouve pas dans la copie de travail.Pour voir les modifications réellement apportées aux fichiers:
$ hg diff
$ hg init my-repository
Les deux utilisent hg diff
. Quand hg diff
est utilisé pour toutes les modifications de la copie de travail et le conseil (le dernier commit) est affiché.
Pour "Comment comparez-vous deux révisions d'un fichier?"
$ hg diff -r{rev1} -r{rev2} {file.code}
La commande ci-dessus affichera une différence entre rev1 et rev2 de "fichier.code".
Pour "Comment comparez-vous votre fichier actuel et une révision précédente?"
$ hg diff {file.code}
La commande ci-dessus affichera une différence entre la version actuelle de "fichier.code" et la dernière révision (la dernière validée).
:RÉ
Il y a trois façons:
Le convert extension clonera un référentiel Subversion existant dans un référentiel Mercurial. Il vient avec Mercurial. Cela fonctionne à peu près comme ça:
hg convert <Subversion URL or directory> <path to new Mercurial repository>
Par exemple, cela va récupérer le coffre du référentiel memcached de SixApart.
hg convert http://code.sixapart.com/svn/memcached/trunk
L'extension peut introduire progressivement de nouvelles révisions d'un référentiel Subversion dans celui de Mercurial (un peu comme pull). Cependant, il ne prend pas en charge de prendre les révisions de Mercurial et de les renvoyer à Subversion (pas de Push). [XXX: Corrigez ceci s'il est erroné] .
Le extension hgsubversion . C'est à bien des égards la solution la plus sophistiquée car elle utilise l'API Subversion pour communiquer avec le référentiel Subversion. Il vise à devenir le pont le hg-svn. Cela permet un aller-retour complet des révisions (clone complet, tirer et pousser), cependant à la date de cette écriture [XXX: Modifiez 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 dernier Mercurial (1.3 au moment de la rédaction de cet article).
tags/
pour les distinguer des branches nommées de manière équivalente).closed-branches
pour fermer les branches supprimées dans Subversion.hg svn <subcommand>
bien que cela ait pour but d’être intégré au point que vous n’ayez pas besoin de la partie 'svn' (c’est-à-dire qu’il veut traiter un clone Subversion autant que possible comme tout autre référentiel Mercurial) .;Cela fonctionne comme ceci:
cloner:
hg svnclone <Subversion URL>
OU (uniquement pour svn://
URLs)
hg clone <svn:// URL>
tirez:
hg svn pull
Pousser:
hg svn Push
entrant:
hg svn incoming
sortant:
hg svn outgoing
Extraire un référentiel entier:
hg svnclone http://code.sixapart.com/svn/memcached
L'utilitaire hgsvn ( arborescence de bits ). Jusqu'à récemment, ceci ne vous permettait que de cloner et d'extraire un dépôt Subversion, mais à partir de hgsvn 0.1.7
il supporte Push. [Je ne sais pas comment bien il fait Push. Toute personne plus expérimentée devrait mettre à jour ceci.] Il présente les caractéristiques remarquables suivantes:
branches/some-feature
serait comme hg branch some-feature
. Il place le coffre sur trunk
(c'est-à-dire que rien ne se trouve sur la branche par défaut de Mercurial, à moins que l'utilisateur n'y accède explicitement.)Cela fonctionne comme ceci:
cloner:
hgimportsvn <Subversion URL>
tirez:
hgpullsvn
Pousser:
hgpushsvn
entrant:
hgpullsvn -n
sortant:
hgpushsvn -n
Extraire un référentiel entier:
hgimportsvn http://code.sixapart.com/svn/memcached
Vérifier juste le coffre:
hgimportsvn http://code.sixapart.com/svn/memcached/trunk
$ hg branche my-branch
ou
$ hg clone le dépôt d'origine ma-branche
Notez bien que branch crée un répertoire "virtuel" (c'est-à-dire que les fichiers restent les mêmes, mais que hg les traite comme s'ils étaient différents dans le système), tandis que clone crée une copie complète et réelle. À proprement parler, clone n'est pas une branche.
$ hg tag my-tag
Vous pouvez également cloner votre référentiel pour créer un référentiel spécial tag.
$ hg clone working-repository my-tag-repository
Mercurial se souvient de l'endroit où un référentiel a été cloné (en .hg/hgrc) afin que vous puissiez simplement exécuter:
hg pull
extraire le dernier code de Origin-repository. (Ceci ne met pas à jour le répertoire de travail)
hg update
mettre à jour le répertoire de travail.
hg pull -u
d'effectuer à la fois un pull et une mise à jour.
Veuillez éditer correctement si vous avez installé à partir du code source Linux, ou utilisé les programmes d’installation Windows.
Utilisez easy_install de Python (avec Setuptools ):
Sudo easy_install Mercurial
Ceci trouve la dernière version (1.3.1 au moment de l'écriture) et s'installe à:
/Library/Frameworks/Python.framework/Versions/2.6/bin/
Avec Python 2.6, cela contourne également le package d’installateur de Mercurial OS X (à la version 1.2.1 du 26 juillet 2009). ) se plaignant qu'il a besoin de Python 2.5. D'après la documentation , il semble que Fink et Macports installent la version 1.2.
La plupart des paquets Linux explicites semblent prendre du retard par rapport à la version actuelle, utilisez donc easy_install (comme ci-dessus) ou téléchargez le fichier . ) Mercurial tarball , extrayez l’archive, accédez au répertoire Mercurial et exécutez:
$ make
$ Sudo make install # do a system-wide install
$ hg debuginstall # sanity check
$ hg # see help
(from Introduction à Mercurial, un système de contrôle de version distribué )
Il existe un paquet binaire de la dernière version de Mercurial . TortoiseHg est une extension Windows Shell pour Mercurial, qui l'installe. Cygwin peut également installer Mercurial.
Alternativement (instructions trop longues donc liées ici), vous pouvez construire un Python pur optimisé version de Mercurial à partir des sources.
Mercurial enregistre ses informations de configuration dans ~/.hgrc
sur les systèmes * nix et dans %UserProfile%\Mercurial.ini
sur les systèmes Windows. (%UserProfile%
est typiquement "C:\Documents and Settings\[username]\"
sur Windows 2000 ou Windows XP, et généralement C:\Users\[username]\
sur les systèmes Windows Vista et Windows 7.)
Pour commencer, vous devez définir votre nom d'utilisateur Mercurial en plaçant le texte suivant dans votre .hgrc
ou Mercurial.ini
:
# This is a Mercurial configuration file.
[ui]
username = Firstname Lastname <[email protected]>
Les utilisateurs TortoiseHg sur les systèmes Windows peuvent également exécuter hgtk userconfig
Voir aussi " Création d'un fichier de configuration Mercurial " dans chapitre 2 de " Mercurial: le guide définitif ."
$ cd repository-where-i-want-to merge
$ hg pull branch-i-want-to-merge
$ hg merge # if necessary
hg clone [OPTION]... SOURCE [DEST]
Où 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 d'origine situés dans le référentiel, où il peut s'agir d'un fichier distant URL ou d'un répertoire du système de fichiers. Par exemple:
Et la destination est où le code source sera situé dans votre système de fichiers local.
Appeler cette commande à partir du référentiel local * Mercurial actuel
hg commit [OPTION]... [FILE]...
alias: ci
Où 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
Un exemple de commande serait:
hg commit -m "added readme" README
NOTE :
Activer l'extension 'greffe' dans votre .hg/hgrc
[extensions]
transplant=
Chargez la branche cible puis transplantez la révision cible.
ex.: sélection de cerises révision 81 de la branche 'foo' dans la branche actuelle
$ hg transplant -b foo 81
Pour supprimer un fichier du référentiel et le supprimer lors de la prochaine validation:
$ hg remove {file(s)}
Pour supprimer un fichier du référentiel sans le supprimer
$ hg remove -Af {file(s)}
ou de Mercurial 1.
$ hg forget {file(s)}
Pour afficher l'historique de révision d'un référentiel entier ou de fichiers
$ hg log {file(s)}
ou
$ hg history {file(s)}
Et à voir la liste en ordre inverse
$ hg log -r:
$ hg export -o patchfile changeset
Vous pouvez ensuite importer ceci dans une autre branche avec:
$ hg import patchfile
Quelques options disponibles
$ hg backout -m 'back out second change' tip
reverting myfile
changeset 2:01adc4672142 backs out changeset 1:7e341ee3be7a
$ cat myfile
first change
Étape 1: Créez un fichier de correctif pour rétablir ce qui a changé entre les révisions 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: Appliquez le fichier de correctif:
patch -p1 < revert-change.patch
Certaines des 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'
Le fichier .rej contiendra le contenu du diff qui a échoué, vous aurez besoin de regarder.
$ hg update [-r REV]
@van: Si vous vous engagez plus tard, vous créerez effectivement une nouvelle branche. Ensuite, vous pouvez continuer à travailler uniquement sur cette branche ou éventuellement y fusionner celle existante.
$ hg commit -m "Commit message"
Utilisation hg outgoing
pour obtenir la liste des changesets à définir sur le référentiel par défaut:
$ hg outgoing
Pour obtenir les changements de code réels, utilisez -p
(--patch
). Cela produira chaque changeset dans son intégralité:
$ hg outgoing -p