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?
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.
mq
, rebase
). 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.