Comment appliquer plusieurs correctifs à l'aide de hg de la ligne de commande quand il y a déjà des modifications non validées?
- Je utiliser la commande suivante pour appliquer un patch en Mercurial
, sans commettre :
hg import patch.diff --no-commit
Il fonctionne très bien, mais si j'essaie d'appliquer plusieurs patchs à la fois comme ceci :
hg import patch1.diff --no-commit
hg import patch2.diff --no-commit
...
J'obtiens ce message d'erreur après la deuxième commit :
abort: uncommitted changes
Si je fais exactement la même dans SourceTree
(pour appliquer le patch1 puis patch2 et choisissez "Modifier les fichiers de la copie de travail"), il fonctionne : les deux correctifs sont appliqués sur la copie de travail, les changements de l'patch1 et patch2 combinée/pliées ensemble.
Comment faire la même chose à l'aide de hg de la ligne de commande ?
OriginalL'auteur tigrou | 2014-10-24
Vous devez vous connecter pour publier un commentaire.
C'est le comportement qui a été conçu par l'Mercurial auteurs: imaginez que vous avez "faites manuellement" les modifications non validées dans une copie de travail, nous ne voulons pas
hg import
automatiquement appliquer le patch, et de s'engager à la fois vos modifications et les changements de patch avec un mauvais message du journal et à la fois des changements emmêlés ensemble.C'est pourquoi le
hg help import
dit:La commande d'importation est plus pour l'importation de révisions (avec des métadonnées de niveau lorsque les données proviennent de
hg export
) de se contenter d'appliquer des correctifs. Si vous avez vos propres modifications dans la copie de travail, vous pouvez par exemple utiliser encorehg import --bypass
et aucune erreur ne s'y passera, parce que la livraison est appliqué directement sur le référentiel et non pas à la copie de travail. (Note: mais alors, si vous venez de valider vos modifications, vous obtiendrez deux têtes, que vous aurez besoin de fusionner.. :-).Une solution avec la ligne de commande Unix-systèmes est d'utiliser le
patch
commande directement au lieu dehg import
car aucune vérification n'des modifications locales sera effectuée. E. g.,Pour les non-Unix systèmes, vous pouvez également avoir un pur Mercurial solution en installant le
shelve
extension, de l'activer dans votre fichier de configuration (mercurial.ini), et ensuite utilisershelve
pour gérer les fusionne un patch après l'autre:Si jamais un conflit peut se produire,
shelve
le détectera et vous avez à résoudre puis direshelve
que c'est résolu avec la--continue
option.Espère que ça vous aidera.
patch
commande : je n'ai pas d'utilité dans mon mercurial dossier (windows), tu parles dehg patch
? Si oui j'ai déjà essayé avant de demander ce DONC, la question, et il a juste rapport même message d'erreur quehg import
Il semble être un
Linux
utilitaire, peut-être que l'installation decygwin
le font fonctionner.Je ne savais pas que vous n'étiez pas à l'aide de Unix, oui
patch
est un utilitaire Unix. Vous pouvez: utiliser une version Cygwin, utiliser le copier comme vous l'avez mentionné, ou je pense que vous pouvez avoir un "pure-hg" solution, je vais l'ajouter à ma réponse.. 😉Si vous avez également des
git
installé, vous pouvez l'utiliser pour faire les correctifs que dans votre première méthode:git apply
va faire le travail.Merci pour suggérer
patch
, exactement ce dont j'avais besoin!OriginalL'auteur Christophe Muller
Voici ce qui a fonctionné pour moi (windows solution), l'idée a été saisi de Christophe Muller réponse :
Simplement concaténer tous les patchs (comme un gros fichier), puis de l'appliquer.
OriginalL'auteur tigrou
Une solution possible est d'utiliser Mercurial Files D'Attente (remarque: il semble que cette extension est "souvent considéré comme l'autodérision", mais il n'est pas obsolète pour l'instant, et est livré pré-installé avec Mercurial).
Si vous n'avez pas utilisé MQ avant, c'est très pratique même si un peu complexe. Mais elle vous permet de créer des files d'attente de patchs, qui peut être poussé, sauté, re-commandés, etc.
Vous pouvez l'utiliser pour vous aider à résoudre votre problème comme suit:
La
-P
option pousse les modifications que vous les importez, ce qui signifie que vous sont effectivement vérifier qu'ils appliquent correctement.Lorsque vous avez tous les patchs sont importés dans la MQ, pop tous (pour ne pas les appliquer et vous êtes de retour où vous avez commencé), et plier le tout dans un nouveau patch:
Alors si vous êtes heureux avec le résultat patch, il suffit de convertir en "réel" de l'ensemble de modifications:
Ah, je dois avoir permis à moi-même:) et oui, j'étais en train de lire cet article tout à l'heure.
OriginalL'auteur icabod
Je pense qu'il y a peut-être une façon plus élégante de le faire:
(si vous voulez extraire une inversion de patch en premier):
hg diff -c xxx --reverse > 1.diff
OriginalL'auteur Zang XC