In Mercurial, the phase of a revision can be changed arbitrarily. What are the consequences of a phase change for all possible transitions (public, draft, secret) x (public, draft, secret)? Which phase changes are safe? Which may cause troubles and which kind of troubles? Which are more or less no-ops?
2 に答える
コミットのデフォルト フェーズは ですdraft
。これは、フェーズが存在しない場合の処理方法です。変更セットをプッシュするdraft
と、mercurial は自動的にフェーズを に変更しpublic
ます。これを使用して、どの変更セットが既に公開されているかどうかを知ることができます。
しかし、実際の問題は、変更セットがフェーズにある場合、mercurial では履歴編集拡張機能 ( 、など)public
を使用してそれらを変更できないことです。履歴の編集はローカル リポジトリでのみ行われ、 /操作では反映されないため、これは非常に重要です。そのため、変更セットが公開されると制御不能になり、変更するのは危険です。mq
rebase
pull
push
任意のフェーズから別のフェーズに変更できます。「通常の流れ」は、より高いフェーズ (secret->draft->public) に移行することですが、Mercurial では、--force
オプションを使用してより低いフェーズに変更することができます。相変化だけでは無害です。たとえば、orから移動public
するときに発生する唯一のことは、履歴編集の保護が失われることだけです。他には何もありません。プルとプッシュは引き続き正常に機能します。変更セットには一意の識別子があるため、Mercurial が変更セットについて混乱することはありません。このようなフェーズ変更後に行われる履歴編集アクションは、問題を引き起こす可能性があります。そのため、Mercurial はフェーズ変更で警告を出し、それが本当に必要なものであることを確認するためにオプションを要求します。draft
secret
--force
一般に、公開されたコミットは変更されるべきではありません。これは、フェーズが確実にしようとしていることです。しかし、すべてのリポジトリを制御できる可能性があります。または、何かを押して、まだ誰もそれを引っ張っていないことを知っているかもしれません。理由が何であれ、変更セットのフェーズをドラフトに戻して編集するオプションがあります。ただし、この編集は変更セットがあるすべてのリポジトリで行う必要があります。