2010-06-14 10 views
1

La question courte est: si je hg rollback, comment Peter obtient-il ma version rétractée s'il cloné de moi? Quelles sont les étapes exactes que lui ou moi doit faire ou taper?Dans Mercurial, quelle est l'étape exacte que Peter ou moi doit faire pour qu'il récupère la version restaurée?

Ceci est lié à In Mercurial, when Peter "hg clone" me, and I commit and he pull and update, he gets my version, but not when I rollback?

Les détails:

Après les étapes suivantes, Marie a 7 et Peter a 11. Mon dépôt est 7 Quelles sont les étapes exactes que Pierre ou moi a à faire ou à écrire pour que PETER récupère 7?

F:\>hg init hgme 
F:\>cd hgme 
F:\hgme>echo the code is 7 > code.txt 
F:\hgme>hg add code.txt 
F:\hgme>hg commit -m "this is version 1" 
F:\hgme>cd .. 
F:\>hg clone hgme hgpeter 
updating to branch default 
1 files updated, 0 files merged, 0 files removed, 0 files unresolved 
F:\>type hgpeter\code.txt 
the code is 7 
F:\>cd hgme 
F:\hgme>notepad code.txt [now i change 7 to 11] 
F:\hgme>hg commit -m "this is version 2" 
F:\hgme>cd ..\hgpeter 
F:\hgpeter>hg pull 
pulling from f:\hgme 
searching for changes 
adding changesets 
adding manifests 
adding file changes 
added 1 changesets with 1 changes to 1 files 
(run 'hg update' to get a working copy) 
F:\hgpeter>hg update 
1 files updated, 0 files merged, 0 files removed, 0 files unresolved 
F:\hgpeter>type code.txt 
the code is 11 
F:\hgpeter>cd ..\hgme 
F:\hgme>hg rollback 
rolling back last transaction 
F:\hgme>cd .. 
F:\>hg clone hgme hgmary 
updating to branch default 
1 files updated, 0 files merged, 0 files removed, 0 files unresolved 
F:\>type hgmary\code.txt 
the code is 7 
F:\>cd hgpeter 
F:\hgpeter>hg pull 
pulling from f:\hgme 
searching for changes 
no changes found 
F:\hgpeter>type code.txt 
the code is 11 

Quelles sont les étapes exactes Pierre ou moi doit faire ou de type SO QUE PETER GETS 7 retour? Il devrait y avoir quelques étapes que Peter peut faire pour obtenir l '"état actuel" de mon dépôt depuis qu'il a cloné de moi. Je ne devrais pas avoir besoin de frapper à sa porte pour lui dire: «Hé, tu dois revenir en arrière» ou peu importe.

Répondre

4

Si quelqu'un a déjà apporté vos modifications (ce que vous décrivez), une restauration n'est pas appropriée.

De hg manuel:

Cette commande n'est pas destiné à être utilisé sur les dépôts publics. Une fois que les modifications sont visibles pour être tirées par d'autres utilisateurs, retourner une transaction localement est inefficace (quelqu'un d'autre peut déjà avoir tiré les modifications). En outre, une course est possible avec les lecteurs du référentiel ; par exemple, un retrait en cours du référentiel peut échouer si une annulation est effectuée.

Ce que vous devez faire est hg backout le changeset, puis dites à Peter de tirer.

Si vous insistez pour revenir en arrière, vous pouvez demander à Peter de recloner le référentiel, mais je ne recommanderais pas de travailler de cette façon.

+0

il semble que je devrais avoir utilisé "hg backout -r -1" - qui est-à-dire Backout ma version précédente (cancel mon précédent commit) ... et une nouvelle révision est créée. Donc Peter, le sachant ou pas, quand il fait un "hg pull" et "hg update", obtiendra le "backout" dans tous les cas. S'il a fait des changements et veut commettre et pousser, hg lui dira de tirer et de mettre à jour en premier, ce qui aura aussi le "backout". –

+0

Vous avez raison. rollback est une annulation, et vous devriez avoir fait backout, alors peter l'obtiendrait dans le cadre de son cycle normal push/pull –

2

Oui, ce scénario de changement de code ne doit jamais utiliser hg rollback. Il devrait utiliser hg backout. hg rollback supprime l'histoire, mais si

1) quelqu'un a tiré de vous
2) ou, vous avez poussé

alors votre version est connue pour être « dans la nature » et un jour peut « revenir à mordre vous "en rajoutant à votre dépôt. Donc, la règle est, n'utilisez jamais hg rollback, sauf si vous annulez quelque chose qui n'aurait jamais dû être dans le dépôt, comme tous les fichiers compilés qui rendent l'historique du dépôt très grand, et vous êtes sûr que personne n'a tiré et vous jamais poussé, puis utilisez hg rollback.Pour une utilisation de contrôle de révision ordinaire, utilisez hg backout

hg backout tip 

sera Backout la dernière révision de votre dépôt (en créant une nouvelle histoire et changeset).

Référence: http://hgbook.red-bean.com/read/finding-and-fixing-mistakes.html
la section face aux changements engagés