J'ai un référentiel Mercurial contenant une poignée de projets connexes. Je souhaite créer un seul de ces projets pour travailler ailleurs.
Le clonage n'est-il qu'une partie d'un référentiel possible, et est-ce la bonne façon d'y parvenir?
Ce que vous voulez, c'est un clone étroit ou partiel , mais ce n'est malheureusement pas encore pris en charge.
Si vous avez déjà un grand référentiel et que vous réalisez qu'il serait logique de le diviser en plusieurs référentiels plus petits, vous pouvez utiliser extension de conversion pour faire un Mercurial en conversion Mercurial . Notez que cela crée un nouveau référentiel foo
et vous ne pouvez pas pousser/tirer entre your-big-repo
et foo
.
Le convert extension
n'est pas activé par défaut, alors ajoutez ce qui suit au fichier hgrc
de votre dépôt ou à votre Mercurial.ini
fichier:
[extensions]
hgext.convert=
Ensuite, créez un map.txt
fichier avec
include "libs/foo"
rename "libs/foo" .
(notez que vous pouvez utiliser des barres obliques même sous Windows) et exécuter
$ hg convert --filemap map.txt your-big-repo foo
Cela fera de foo
un référentiel avec l'historique complet du libs/foo
dossier de your-big-repo
.
Si vous souhaitez supprimer toutes les preuves de foo
de your-big-repo
vous pouvez effectuer une autre conversion là où vous utilisez exclude libs/foo
pour se débarrasser du répertoire.
Lorsque vous avez plusieurs référentiels comme celui-ci et que vous souhaitez les utiliser dans leur ensemble, vous devriez regarder sous-référentiels . Cette fonctionnalité vous permet d'inclure d'autres référentiels dans une extraction, de la même manière que svn:externals
travail. Veuillez suivre les recommandations sur cette page wiki.
Au lieu de faire un clone partiel, vous pouvez utiliser Convert Extension pour diviser votre dépôt en plusieurs dépôts par sous-référentiel.
Plus précisément, voir la section, Conversion à partir de Mercurial :
Il est également utile de filtrer les référentiels Mercurial pour obtenir des sous-ensembles d'un référentiel existant. Par exemple, pour transformer un sous-répertoire d'un sous-répertoire d'un dépôt toto en un dépôt avec sa propre vie (tout en conservant son historique complet), procédez comme suit:
$ echo include subfoo > /tmp/myfilemap $ echo rename subfoo . >> /tmp/myfilemap $ hg convert --filemap /tmp/myfilemap /path/to/repo/foo /tmp/mysubfoo-repo
Je suis tombé sur ce problème et j'ai trouvé un moyen de le faire: utiliser des liens symboliques (Linux uniquement malheureusement)
Par exemple, si vous n'avez besoin que de /project
dans le référentiel, sur votre ordinateur, clonez le référentiel dans un autre dossier, puis utilisez ln -s /repo/location/ project
. Mercurial s'en chargera
(Fin 2016) Mainline Mercurial ne prend toujours pas en charge les "clones étroits", mais il existe des extensions tierces qui abordent le problème de différentes manières.
Si vous pouvez faire face à une simple extraction étroite (alias "extraction éparse" ou "extraction partielle par chemin de fichier"), alors le sparse.py
extension du référentiel hg-experimental (regardez à l'intérieur du hgext3rd/
répertoire) peut être exploitable. Dans ce scénario, vous clonez toujours l'historique complet (ainsi le répertoire .hg n'est pas plus petit) mais votre répertoire de travail n'affiche/agit que sur un sous-ensemble du référentiel complet.
Alternativement, Google a créé un extension NarrowHG qui fait un clonage étroit (alias "clonage partiel par chemin de fichier"). Vous devrez être en contrôle du serveur, du client et être prêt à utiliser des fonctionnalités expérimentales, mais cela restreint vraiment l'historique copié du clone dans .hg à un sous-ensemble de ce qui était dans le référentiel d'origine.
(2019) L'extension sparse
a été fusionnée dans Mercurial 4. comme extension expérimentale sparse
. L'extension NarrowHG a été fusionnée dans Mercurial 4.6 comme hgext.narrow
extension.
Ce n'est pas possible, hg clone
clonera tout le référentiel.
Vous pouvez jeter un œil à l'extension de sous-référentiel qui vous permet d'avoir des référentiels dans un référentiel, ce qui pourrait correspondre à vos besoins.
C'est simple avec le Convertir l'extension .