Comment puis-je cloner un sous-dossier d'un dépôt Mercurial?
J'ai un dépôt Mercurial contenant une poignée de projets connexes. Je veux branche juste un de ces projets pour travailler ailleurs.
Est de cloner qu'une partie d'un référentiel possible, et est-ce le bon moyen pour y parvenir?
- De ce que j'ai entendu, c'est une des raisons pour ne pas mettre plusieurs projets dans l'un des pensions.
Vous devez vous connecter pour publier un commentaire.
Ce que vous voulez, c'est un étroites ou partielle clone, mais ce n'est malheureusement pas encore pris en charge.
Si vous disposez déjà d'un grand dépôt et vous vous rendez compte qu'il serait judicieux de le découper en plusieurs petits dépôts, vous pouvez utiliser le convertir extension faire un Mercurial Mercurial conversion. Notez que cela crée un nouveau référentiel
foo
et vous ne pouvez pas pousser/tirer entreyour-big-repo
etfoo
.La
convert extension
n'est pas activée par défaut, ajoutez les lignes suivantes à votre repo dehgrc
fichier ou votremercurial.ini
fichier:Puis créer un
map.txt
fichier avec(remarque: vous pouvez utiliser des barres obliques même sur Windows) et exécutez
Qui fera
foo
un référentiel avec l'histoire complète de l'libs/foo
dossier deyour-big-repo
.Si vous souhaitez supprimer tous les éléments de preuve de
foo
deyour-big-repo
vous pouvez vous faire une autre conversion lorsque vous utilisezexclude libs/foo
pour se débarrasser de l'annuaire.Lorsque vous avez plusieurs référentiels comme ça et que vous souhaitez utiliser comme un tout, alors vous devriez regarder à subrepositories. Cette fonctionnalité vous permet d'inclure d'autres dépôts à une caisse — de la même façon
svn:externals
travail. Veuillez suivre les recommandations sur cette page wiki.Au lieu de faire un partiel clone, vous pouvez utiliser le Convertir Extension de diviser votre pension à plus d'un repo par sous référentiel.
En particulier, consultez la section La conversion de Mercurial:
J'ai tombé en face de ce problème et a trouvé une façon de le faire: en Utilisant les liens symboliques (Linux seulement, malheureusement)
Par exemple, si vous avez seulement besoin
/project
dans le référentiel, sur votre ordinateur cloner le repo dans un autre dossier, puis utilisezln -s /repo/location/project
. Mercurial gèreIl n'est pas possible,
hg clone
permet de cloner le dépôt entier.Vous pouvez prendre un coup d'oeil un sous-référentiel extension qui vous permet d'avoir un dépôt à l'intérieur d'un référentiel, qui peut correspondre à vos besoins.
(Fin 2016) de la canalisation Principale Mercurial continue à ne pas le paquet de soutien pour "limiter les clones", mais il y a des tiers extensions de s'attaquer au problème de différentes façons.
Si vous pouvez faire face avec juste un étroit caisse (aka "sparse checkout" ou "partielle de la caisse par le chemin d'accès au fichier") puis Facebook est
sparse.py
extension de la hg-dépôt experimental (regarder à l'intérieur de lahgext3rd/
répertoire) peut être réalisable. Dans ce scénario, vous avez encore le clone de l'histoire (et donc de la .hg répertoire est pas plus petit), mais votre répertoire de travail ne montre/actes sur un sous-ensemble de la totalité du référentiel.Sinon Google ont créé un NarrowHG extension qui ne étroit clonage (aka "partielle de clonage par chemin de fichier"). Vous aurez besoin d'être dans le contrôle du serveur, le client et être disposés à utiliser les fonctionnalités expérimentales mais il ne veut vraiment limiter le clone est copié dans l'histoire .hg à un sous-ensemble de ce qui était à l'origine du référentiel.
(2019) Le NarrowHG extension a été fusionnée dans la Mercurial 4.6 comme
hgext.étroit
extensionIl s'agit de droite de l'avant avec la Convertir extension.
hg export
) les modifications apportées au texte d'origine repo.-f
drapeau. Voir ce script comme un exemple. (Note: nécessite le convertir et graphlog extensions.)hg push -f
, vous vous retrouvez avec non seulement des têtes multiples, mais également plusieurs racines. C'est parce que les nœuds racine des deux référentiels différents ethg push -f
va donc copier toutes les données de vos partielle clone pour le plein de clone. Le--filemap
argument doit êtref
dans votre pâte et après la correction que vous obtenez cette sortie. LeCreated
commettre est dupliqué et ce n'est probablement pas la façon dont vous voulez que le référentiel principal pour ressembler.