Comment cloner un sous-dossier d'un dépôt dans Mercurial?
j'ai un dépôt mercuriel contenant une poignée de projets connexes. Je veux branche juste un de ces projets pour travailler ailleurs.
le clonage n'est-il possible que dans un dépôt, et est-ce la bonne façon d'y parvenir?
6 réponses
Ce que vous voulez, c'est un étroit ou partielle clone , mais ce n'est malheureusement pas encore pris en charge.
si vous avez déjà un grand dépôt et que vous réalisez qu'il serait logique de le diviser en plusieurs dépôts plus petits, alors vous pouvez utiliser le convert extension pour faire une conversion Mercuriale à Mercuriale . Notez que cette crée un nouveau dépôt foo
et vous ne pouvez pas pousser/tirer entre your-big-repo
et foo
.
le convert extension
n'est pas activé par défaut, ajoutez donc ce qui suit à votre fichier hgrc
ou à votre fichier mercurial.ini
:
[extensions]
hgext.convert=
puis créer un map.txt
fichier avec
include "libs/foo"
rename "libs/foo" .
(notez que vous pouvez utiliser des slashs avant même sur Windows) et exécuter
$ hg convert --filemap map.txt your-big-repo foo
qui fera de foo
un dépôt avec l'historique complet du dossier libs/foo
de your-big-repo
.
si vous voulez supprimer toutes les preuves de foo
de your-big-repo
vous pouvez faire une autre conversion où vous utilisez exclude libs/foo
pour se débarrasser du répertoire.
quand vous avez plusieurs dépôts comme celui - ci et que vous voulez les utiliser dans leur ensemble, alors vous devriez regarder sous-dépôts . Cette fonctionnalité vous permet d'inclure d'autres dépôts dans une caisse - tout comme le fonctionnement de svn:externals
. Veuillez suivre les recommandations sur cette page wiki.
au lieu de faire un clone partiel, vous pouvez utiliser le Convert Extension pour diviser votre repo en plus d'un repo par sous-dépôt.
spécifiquement, voir la section, conversion de Mercurial :
il est également utile de filtrer les dépôts mercuriels pour obtenir des sous-ensembles d'un dépôt existant. Par exemple, transformer un sous-dossier d'un dépôt foo en un dépôt avec sa propre vie (tout en gardant sa pleine histoire), faire ce qui suit:
$ echo include subfoo > /tmp/myfilemap $ echo rename subfoo . >> /tmp/myfilemap $ hg convert --filemap /tmp/myfilemap /path/to/repo/foo /tmp/mysubfoo-repo
j'ai trébuché sur ce problème et j'ai trouvé une façon de le faire: utiliser symlinks (Linux seulement malheureusement)
par exemple, si vous n'avez besoin que de /project
dans le dépôt, sur votre ordinateur, clonez le fichier repo dans un autre dossier, puis utilisez ln -s /repo/location/ project
. Mercurial s'en chargera
il n'est pas possible, hg clone
va cloner l'ensemble du dépôt.
vous pouvez jeter un oeil à l'extension du sous-dépôt qui vous permet d'avoir des dépôts à l'intérieur d'un dépôt, qui pourraient correspondre à vos besoins.
(fin 2016) Mainline Mercurial ne prend toujours pas en charge le support des" clones étroits", mais il existe des extensions tierces qui s'attaquent au problème de différentes manières.
si vous pouvez faire face à seulement un étroit checkout (alias" sparse checkout "ou" partial checkout by file path") alors L'extension sparse.py
de Facebook à partir du hg-experimental repository (regardez à l'intérieur du répertoire hgext3rd/
) peut être réalisable. Dans ce scénario, vous clonez encore l'histoire complète (d'où le .HG directory n'est pas plus petit) mais votre répertoire de travail ne montre/n'agit que sur un sous-ensemble du dépôt complet.
alternativement Google a créé un Narrow HG extension qui fait narrow Clonage (alias"Clonage partiel par chemin de fichier"). Vous aurez besoin d'être en contrôle du serveur, du client et d'être prêt à utiliser les fonctionnalités expérimentales, mais il limite vraiment le clone a copié l'histoire .hg à un sous-ensemble de ce qui se trouvait dans le dépôt initial.