2017-09-06 2 views
0

J'ai deux référentiels Mercurial. Les deux repos ont leur propre histoire sans rapport. Appelons-les:Importer un dépôt non lié dans un autre référentiel dans Mercurial

  • "Main" (contient le projet lui-même)
  • "Lab" (contient un contenu connexe)

Je voudrais maintenant "importer" le repo Lab dans le Main avec les contraintes suivantes:

  • Les deux repos doivent conserver leur historique.
  • Lab doit être enregistré en tant que sous-dossier au Main.
  • Les changements de Lab doivent être situés dans une branche qui fusionne en Main.

Après https://www.mercurial-scm.org/wiki/MergingUnrelatedRepositories fonctionne fondamentalement mais ne crée pas une branche.

+0

* ne crée pas de branche * Dépend de ce que vous entendez par "branche". Si vous souhaitez que la branche nommée 'default' dans le référentiel entrant soit renommée * en un autre nom (afin que les validations importées ne partagent pas le nom de la branche), vous pouvez utiliser l'extension Convert. Voir https://stackoverflow.com/questions/7567636/using-the-hg-convert-extension-branchmap-option – torek

+1

En relation: https://pt.stackoverflow.com/a/101243/64 (en portugais, mais le les images peuvent aider) –

Répondre

1

Compte tenu d'un dépôt Main et Lab, vous pouvez fusionner le dépôt Lab dans le référentiel principal et renommer sa branche par défaut à un autre nom en procédant comme suit avec l'extension convert:

  1. Créer un fichier « branchmap .txt "contenant default Lab. En utilisant cette branche, les changesets de Lab dans la branche "default" seront nommés "Lab". Si vous avez d'autres branches dans votre référentiel Lab, vous souhaiterez peut-être des entrées supplémentaires.
  2. Exécuter hg convert Lab Main --branchmap branchmap.txt. Cela suppose que les répertoires Lab et Main repository et le fichier branchmap.txt se trouvent dans le répertoire en cours. Ajustez les chemins en conséquence. Les changesets Lab seront ajoutés au référentiel principal.
  3. Dans le référentiel principal, les commandes suivantes déplacent les fichiers Lab dans un sous-répertoire Lab, puis fusionnent la branche Lab par défaut.
    a. hg update Lab
    b. mkdir Lab
    c. hg move * Lab d. hg ci -m "Moved Lab files to Lab subdirectory"
    e. hg update default
    f. hg merge Lab
    g. hg ci -m Merge

Maintenant vous pouvez continuer à modifier la branche Lab dans le futur et fusionner par défaut si nécessaire.

+0

Vous pouvez également le faire avec "hg pull --force" pour extraire le repo sans rapport et ensuite fusionner les deux têtes que vous finirez avec ensemble. Dans ce cas, vous devriez vous retrouver avec un repo avec deux changesets root, ce qui peut être déroutant, mais de cette façon, vous pouvez conserver les hachages de changeset pour l'un des repos. – ngoldbaum

+0

@ngoldbaum Oui, mais cela ne renomme pas le repo entrant en une nouvelle branche, et pour la fusion, le renommage des fichiers dans un sous-répertoire doit encore être fait. Vous obtenez aussi deux changesets root avec cette méthode, mais 'hg convert' renomme aussi la branche par défaut entrante en un autre nom. –