Création et utilisation de correctifs Mercurial
J'ai rencontré un problème que je "pense" ne peut être résolu à l'aide de patchs.
J'ai cloné un projet à partir de notre dépôt principal, lui a fait quelques modifications (mises à jour, la suppression de fichiers & répertoire et ajouts). Ces changements ne sont pas encore engagés. Le problème, c'est le projet dans le référentiel principal a été supprimé/supprimé et recréé un nouveau projet (le nom est le même, toutes les structures de répertoire, tout est comme avant). J'ai cloné le projet de nouveau à partir du dépôt principal et que vous souhaitez transférer toutes mes modifications non validées.
Je suis encore à explorer l' hg patch
pour résoudre ce problème. Il serait utile si quelqu'un pouvait confirmer que la création et l'ajout d'un patch EST la bonne approche pour cela, toutes les ressources expliquant le processus serait d'une grande aide.
source d'informationauteur Abidi
Vous devez vous connecter pour publier un commentaire.
Je voudrais d'abord faire des copies de tout ce donc vous avez une sorte de retour en arrière.
Puis, dans la copie de travail avec les changements, je voudrais tout d'abord supprimer le
.hg
répertoire, puis copier dans le.hg
répertoire à partir de la nouvelle repo. Ce essentiellement de transferts de tous les fichiers modifiés dans le nouveau repo sans avoir besoin de supprimer tous les fichiers et répertoires.Vous aurez toujours besoin de dire les pensions de titres sur l'opportunité de supprimer tous les fichiers marqués comme manquant. Vous aurez également à gérer renomme manuellement. Si c'est un petit nombre d'opérations, il est plus facile que d'essayer d'utiliser le patch de la méthode.
Une fois cela fait, validez vos modifications et pousser, si nécessaire.
Vous êtes correct — un patch est ce que vous avez besoin de transférer les informations à partir d'un référentiel à un autre (non relié) référentiel. Cela fonctionne puisque les fichiers sont les mêmes, comme vous le notez.
Donc, pour le transfert de vos modifications non validées à partir de votre
old
clone, vous neQui permettra de restaurer les informations enregistrées dans le patch. Cela comprend des informations sur les fichiers qui sont ajoutés ou renommé dans le vieux clone.
Les étapes suivantes peuvent être effectuées avec un standard Mercurial installer:
Exemple
À ce point
example
etexample2
ont un contenu identique, mais les dépôts sont pas liés les uns aux autres en raison de la suppression et à la réinitialisation de l' .hg dossier.Maintenant de faire quelques changements et de s'engager dans l'un des dépôts, puis de les exporter sous forme de patch:
Ci-dessous montre que le référentiel d'autres ne peuvent pas tirer les changements, en raison de la réinitialisation. Il peut, toutefois, d'appliquer le patch avec succès:
semble que ce que vous voulez est patch files d'attente. En ce que vous avez des modifications non validées, et que vous voulez tirer de la nouvelle repo avant de s'engager....
pas de soucis, vos modifications sont sains et saufs .hg/patches/name_of_patch à voir pour vous-même.....
maintenant, tirez dans le nouveau repo
Si vous avez de la chance vous aurez pas de conflits de fusion et vous pouvez aller de l'avant et de commettre le patch....
Et puis, si vous voulez....
Si le repos sont indépendants, à seulement initialisation d'un patch repo sur votre nouveau repo. et copier manuellement le patch et l'ajouter à .hg/patches/série fichier.
en supposant que le patch a été créé. clone de nouvelles pensions de
init patch repo
copie patch
édition de la série de fichiers à l'aide d'un éditeur de quelque sorte
appliquer le patch à nouveau repo
si pas de conflits de fusion et vous êtes convaincu que cela fonctionne
Si la disposition est la même, vous pouvez simplement copier tous les fichiers (à l'exclusion .hg) et ensuite utiliser
hg addrem
.Essayez de regarder dans la MQ plugin, c'est exactement ce que si je me souviens bien. Je n'ai jamais eu a utiliser, donc je ne peux pas dire.
Si l'ancien référentiel a été simplement déplacé/cloné à une nouvelle URL, alors vous pouvez simplement modifier le dépôt distant vous parler de la nouvelle.
Si, toutefois, il a été recréé à partir du sol (même avec la même structure), alors je ne crois pas Mercurial a intégré des fonctionnalités pour vous aider ici. Mercurial patchs de référence spécifiques des révisions qui n'existent pas dans votre nouveau référentiel.
Vous pouvez utiliser un outil de fusion pour effectuer le diff et le ramener à travers tous les changements que vous faites.
Modifiés Pour répondre à la question suivante dans les commentaires:
Lorsque vous clonez le dépôt que vous prenez un instantané complet de la totalité de la variation de l'histoire, avec le changement d'associé-set Id, etc.
Mercurial suit les modifications apportées par le changement-ensembles dans le référentiel, plutôt qu'au niveau du fichier comme Subversion.
Si vous le clone, alors vous pouvez facilement pousser/fusionner dans un autre référentiel qui a également été cloné à partir de la même source.
Si vous recréer le référentiel ensuite les modifier les Id ne correspond pas, et ne peut pas être fusionné dans Hg.
La seule option dans ce scénario serait d'utiliser un outil de Fusion qui vous permettra de voir décalage dans le dossier/fichiers de structure.
Aussi: intéressant de souligner http://hginit.com/ parce qu'il explique (indirectement) une partie de cette.