Question

Quand j'ai deux branches en repo Hg, comment fusionner un seul fichier avec une autre branche, sans avoir tous les autres fichiers de changeset fusionné?

Est-il possible de fusionner uniquement certains fichiers, au lieu de tout changeset?

Était-ce utile?

La solution

AVERTISSEMENT: une telle « fusion factice », comme il est recommandé par @Martin_Geisler, peut vraiment mess vous, si plus tard vous voulez faire une véritable fusion des deux branches. La fusion fictive sera enregistrée, et dire que vous fusionnez dans la branche que vous avez fait la fusion factice à - vous ne verrez pas les changements. Ou si vous fusionnez dans l'autre branche, les changements de cette autre branche seront annulées.

Si vous voulez simplement copier un fichier entier d'une branche à l'autre, vous pouvez simplement faire:

   hg update -r to-branch
   hg revert -r from-branch file
   hg ci -m 'copied single file from from-branch to to-branch

Si vous voulez sélectionner les différentes parties de ce fichier, puis est utile "hg record".

Je viens de faire cela sur mon .hgignore de répertoire.

Si les deux branches ont apporté des modifications à un fichier que vous souhaitez conserver, un sale tour serait de créer une fusion des deux branches en utilisant fusion hg, peut-être / probablement encore une autre branche, vérifiez que, puis copiez un fichier unique entre la fusion et la branche à:

   hg update -r to-branch
   branch merge-branch
   hg merge -r from-branch
   hg ci -m 'temp merge to be discarded"
   hg update -r to-branch
   hg revert -r merge-branch single-file
   hg ci -m 'merged single-file from from-branch to to-branch"
   hg strip merge-branch

Il convient de mentionner: la façon de « copier un fichier unique entre les branches » (ou révisions, ou de la révision de fusionner, ou ....) est « revert hg ». I.e..

   hg update -r Where-you-want-to-copy-to
   hg revert -r Where-you-want-to-copy-from file-you-want-to-copy
   ...
   hg ci

Pour une raison que je, et certains de mes collègues, trouve cela très confusion. « Revenir en arrière » == « copie » ... est logique pour certains modèles d'utilisation, mais pas tous.

Autres conseils

Non. Mercurial fonctionne sur une base changeset.

Mais vous pouvez faire un « factice fusion » où vous ignorez les modifications entrantes de l'une des branches. Avant de vous engager, vous pouvez ensuite revenir les fichiers sélectionnés à l'état où vous voulez:

% HGMERGE=internal:local hg merge     # keep my files
% hg revert --rev other-branch a.txt  # update a.txt to other branch
% hg commit -m 'Dummy merge to pick a.txt from other-branch.'

Peut-être que cela vous aidera un peu.

Je voudrais simplement utiliser un outil externe comme pour diff les vimdiff deux fichiers que je veux fusionner, puis de les fusionner. L'avantage est que vous pouvez faire le montage sélectif sur les parties du fichier. Par exemple:

hg update -r branch-merging-to
hg extdiff -p vimdiff -r branch-merging-from file-I-am-merging

Pour ce faire, vous devez activer les outils externes dans votre .hgrc, ce qui signifie que l'ajout de ces lignes:

[extensions]
hgext.extdiff =  
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top