Mercurial: Was sind die Konsequenzen einer Phasenänderung?

8

In Mercurial kann die Phase einer Revision beliebig geändert werden. Was sind die Konsequenzen einer Phasenänderung für alle möglichen Übergänge (öffentlich, Entwurf, geheim) x (öffentlich, Entwurf, geheim) ? Welche Phasenwechsel sind sicher? Was kann Probleme und welche Art von Problemen verursachen? Welches sind mehr oder weniger No-Ops?

    
mstrap 25.10.2012, 15:14
quelle

2 Antworten

9

Die Standardphase für ein Commit ist draft , so wurden sie behandelt, als die Phasen nicht existierten. Wenn ein draft changeset gedrückt wird, ändert mercurial automatisch seine Phase in public . Sie können damit wissen, welche Changesets Sie bereits veröffentlicht haben oder nicht.

Aber das wirkliche Problem ist, dass, wenn das Changeset in public phase ist, mercurial es nicht erlaubt, sie mit History Editing Extensions zu ändern (wie mq , rebase , etc). Das ist sehr wichtig, da die Bearbeitung des Verlaufs nur im lokalen Repository erfolgt , sie werden jedoch nicht mit pull / push operations weitergegeben. Sobald ein Changeset veröffentlicht wird, ist es außer Kontrolle geraten, es ist gefährlich, es zu ändern.

Sie können von jeder Phase zu jeder anderen Phase wechseln. Der "normale Fluss" ist der Übergang zu einer höheren Phase (geheim- & gt; Entwurf- & gt; öffentlich), aber Mercurial erlaubt den Wechsel zu einer niedrigeren Phase mit der Option --force . Ein Phasenwechsel allein ist harmlos. Zum Beispiel ist das einzige, was passiert, wenn von public nach draft oder secret bewegt wird, dass der Schutz der Verlaufsbearbeitung gelöscht wird, nichts anderes, Pull and Push wird immer noch normal funktionieren, Mercurial könnte niemals verwirrt werden Changesets, weil sie eindeutige Bezeichner haben. Die Verlaufsbearbeitung, die nach einer Phasenänderung stattfindet, kann zu Problemen führen. Aus diesem Grund gibt Mercurial die Warnung in der Phasenänderung aus und benötigt die --force -Option, um zu bestätigen, dass Sie das wirklich wollen.

Generell sollten die veröffentlichten Commits nicht modifiziert werden, das versuchen die Phasen zu gewährleisten. Aber vielleicht haben Sie Kontrolle über alle Repositories. Oder vielleicht hast du etwas geschoben und du weißt, dass noch niemand es gezogen hat. Was auch immer der Grund ist, Sie haben die Möglichkeit, die Phase der Änderungssets zurück zu drängen und zu bearbeiten. Diese Edition muss jedoch in jedem Repository mit den Changesets durchgeführt werden.

    
Rafael Piccolo 25.10.2012, 21:54
quelle
5
  • Eine öffentliche Revision kann nicht mit Tools zur Verlaufsbearbeitung bearbeitet werden (d. h. mq , rebase ).
  • Eine geheime Revision kann nicht in ein anderes Repository verschoben werden (sie wird ignoriert, wenn Sie den Push-Befehl geben oder wenn ein anderes Repository versucht, zu ziehen).
  • Eine Entwurf Revision erlaubt beides, wird aber automatisch in public geändert, wenn sie in ein anderes Repository verschoben wird.

Der Zweck des Phasensystems besteht darin, zu verhindern, dass Sie eine Revision modifizieren, nachdem Sie sie in ein anderes Repository verschoben haben. Das ist eine schlechte Idee, wenn Sie die alte Version der Revision nicht von allen Repositories löschen können wurde zu geschoben.

Alle Phasenänderungen sind mehr oder weniger No-Ops; es ist nur eine Markierung, um anzuzeigen, was mit einer Revision zu tun ist oder nicht.

    
Brilliand 25.07.2013 23:39
quelle

Tags und Links