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?

60
demandé sur Martin Geisler 2009-05-28 15:18:47

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.

52
répondu Martin Geisler 2017-06-30 10:10:34

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
11
répondu Nathan Lee 2017-06-30 10:12:04

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

6
répondu TheLQ 2011-01-31 03:29:04

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.

3
répondu Romain 2009-05-28 11:58:36

(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.

2
répondu Anon 2017-02-22 05:21:40

c'est tout droit avec le Convert extension .

2
répondu cheenu 2017-06-30 10:12:39