10
votes

Comment puis-je diviser le travail en plusieurs patchs avec des files d'attente mercuriales?

Si je me retrouve au code pendant un moment et oublié de créer une série de correctifs à mesure que je vais, comment créer la série de correctifs rétrospectivement? Jusqu'à présent, la seule chose qui vient à l'esprit est la suivante:

# Prepare and test the first batch of changes.
$ hg qrecord -m 'first batch' 1.patch
$ hg qnew -m 'stash downstream changes' stash-1.patch
$ hg qdelete -k temp-1.patch
$ make hello
cc     hello.c   -o hello
hello.c: In function ‘main’:
hello.c:4: error: syntax error at end of input
make: *** [hello] Error 1
$ echo '}' >> hello.c
$ make hello
cc     hello.c   -o hello
$ hg qrefresh

# Recover the stashed changes.
$ patch -p1 < .hg/patches/last.patch

# And around we go again!
$ hg qrecord -m 'second batch' 2.patch
$ hg qnew -m 'stash downstream changes' stash-2.patch
$ hg qdelete -k stash-2.patch
$ make hello
...


3 commentaires

Cette question est-elle sur la division dans différents correctifs par fichier? C'est à dire. Les modifications pour un fichier donné ne sont pas divisées sur plusieurs patchs. Parce que si oui, on peut faire mieux que l'approche que vous avez décrite ci-dessus. C'est une ancienne question, mais toujours une pertinente.


@FAHEMMITHA: Je suis passée à GIT il y a tout à fait, alors ce n'est pas particulièrement pertinent pour moi. Mais pour l'enregistrement, je souhaite très certainement différencier les modifications dans les fichiers, en particulier les fichiers de projet de haut niveau qui contiennent souvent plusieurs ajouts / suppressions de fichiers non liés. En fait, c'est presque la norme plutôt que l'exception.


D'accord. Merci pour les commentaires, Marcelo.


5 Réponses :


2
votes

Je pense que le Crecord Extension vous laissera faire cela. Il vous donne une interface interactive basée sur les malédictions où vous pouvez choisir exactement ce qui est dans un commit.


2 commentaires

Basé sur une lecture superficielle, Crecord semble être un équivalent basé sur les malédictions à l'extension d'enregistrement. Merci d'avoir pointé cette extension, car il a l'air assez pratique. Cependant, il ne semble pas réduire le nombre d'étapes que je dois jouer; Cela rend simplement le premier pas plus agréable.


@Marcelocantos, QCrecord réduit les étapes. ATTENDU QUE QRecord me dit presque toujours "Impossible d'éditer le patch pour l'ensemble du dossier", QCrecord Merry me permet d'exclure des mecs et des lignes arbitraires dans mes patchs.



3
votes

TORTOISHG a une caractéristique très utile "Sélection de la peau" dans le dialogue commettre pour une sorte de ce travail:
http://tortoisehg.bitbucket.io/manual/2.0/commit. HTML # Change-Sélection


4 commentaires

La plupart de mes travaux ne sont pas sous Windows, mais je l'utilise de temps en temps, alors merci pour le conseil. Malheureusement, comme avec la suggestion de @ Ryanwilcox, cela semble aider à la première étape de mon processus, plutôt que de simplifier le processus dans l'ensemble.


FYI: Si nécessaire, vous pouvez exécuter Tortoisehg sur Linux et Mac OS :) Bitbucket.org/TortoiseHG/ Stable / Wiki / Installation


Je n'en avais aucune idée! C'est bon à savoir.


Après la mise à niveau vers la dernière version de Tortoisehg et permettant aux extensions MQ et Tabley, j'ai trouvé que je pouvais sélectionner des mecs individuels dans l'outil d'étagère. Avec des correctifs non finalisés dans la file d'attente de patch, ce qui facilite la déplacement des mecs dans les deux sens entre le répertoire de travail et le patch sélectionné et non appliqué. Les modifications apportées au répertoire de travail peuvent ensuite être appliquées à la quête du patch en haut de la file d'attente.



6
votes

the MQTUTTORIAL explique comment scinder les correctifs. Donc, vous pouvez créer un patch de votre travail actuel et la diviser en plusieurs patchs.


2 commentaires

Merci. Ce n'est pas une solution idéale, mais c'est beaucoup mieux que ce que j'ai fait jusqu'à présent.


Ce que je fais habituellement est d'utiliser deux référentiels et un bel outil de difforme visuel comme au-delà de la comparaison. Utilisation des noms dans le didacticiel, je commence par le repo A avec OP appliqué et je clonage A à B. Puis dans AI qpop -a , diff A et B, Cherry-Choisissez les modifications de P1 à Copier de b à A, qnew -f p1 , puis copiez le reste, qnew -f p2 .



1
votes

Activer les extensions intégrées:

$ hg qpop my.patch
$ patch -p1 <.hg/patches/my.patch

$ hg qnew -i my1.patch
 ....
$ hg qnew -i my2.patch
 ....
$ hg qnew myN.patch   # last without interactive stuff

$ hg qdelete --keep my.patch


0 commentaires

0
votes

Tout d'abord, installez CRECORD car il s'agit simplement d'une façon une voie bien une manière plus agréable de fractionnement des changements.

$ hg qcrecord part1
$ hg qnew part2 # ok, slightly a lie at this point
$ hg qpop
$ echo "}" >> hello.c
$ hg qrefresh
$ hg qpush
$ hg qcrefresh # Keep just what you want in part2
$ ...


0 commentaires