4

私はbitbucketに関するオープンソースプロジェクトを持っています。最近、私は(何らかの理由で)実際のブランチを作成しなかった実験的なブランチに取り組んでいます。代わりに、ブックマークを使用しました。

だから私は同じリビジョンで2つのブックマークを作成しました

  • テスト-私が取り組んだ新しいコードは、(実験の失敗のために)放棄されるべきです
  • main-動作する安定した古いコード

私はテストで働きました。また、テストからサーバーにプッシュしました。これにより、tipタグを新しい不安定なコードに切り替えることになりましたが、実際にはメインのままにしておきたいと思っていました。hg update mainを実行してから重要でない変更をコミットすることにより、メインブックマークに「切り替え」ました。だから、私はこれをプッシュしました、hg push -fそして今私のソース管理はサーバー上で「正しい」です。

ブランチを「切り替える」ためのよりクリーンな方法があるはずだと私は知っています。このような操作のために、将来どうすればよいですか?

4

2 に答える 2

1

tipあらゆる種類のブランチを持つリポジトリでは、広く役立つ概念ではありません。ブックマーク、名前付きブランチ、または匿名ブランチを使用しているかどうかに関係なく、tip常にブランチの最新のコミットを意味し、気にすることはめったにありません。tipあなたの問題の真の解決策は、 !について心配するのをやめることです。

于 2012-10-29T21:15:16.080 に答える
0

ブランチを(引用符なしで)切り替えているので、あなたの質問はよくわかりません。名前がブランチでなくても、ブックマークを使用するとブランチのままになります。

あなたが犯した間違いは正直な間違いであり、Mercurialにブックマークでそれを再び行うことからあなたを保護させる方法はありません(同じリビジョンを異なるブックマークでマークし、間違ったブックマークでコミットする)。私があなたに言うことができるのは、Mercurialを使ってプライベートローカル分岐を行う方法です。こうすることで、今の結果を回避できます。

名前付きブランチとフェーズを使用します

Mercurial Phasesは本当に甘いので、簡単に説明しましょう。フェーズと呼ばれる3つの特別な状態の改訂をマークできます。これらは、シークレット、ドラフト、およびパブリックです。

  1. 秘密:押されないでください。履歴編集で変更できます。
  2. ドラフト:プッシュされます。履歴編集で変更できます。これは、リビジョンのデフォルトの状態です。
  3. public:プッシュされます。それらに履歴編集拡張機能(ストリップ、リベース、ヒストリットなど)を使用すると、警告が発行されます。

前述のように、すべてのローカルリビジョンはデフォルトでドラフトであり、プッシュすると公開されます。このコマンドを使用しhg phaseて、特定のフェーズへのリビジョンをマークできますが、#3から#2、または#2から#1(前の番号付けによる)に移行する場合は、変更を強制するために-f引数が必要です。 、 これは:

シークレット->ドラフト->パブリック

左に移動するには、-forceまたは-fを使用する必要があります。

これがあなたがすることです:

hg branch experiment
hg commit -m "Opening experimental branch" //say this creates revision 123
hg phase -sf tip                           //s is for secret, f is for force
//... hack hack hack
hg commit -m "Uh oh screwed up here"
hg push                                    //no secret revisions are pushed

今、あなたはその枝を捨ててそのままにしておくことができます、それは決して押されることはありません。それを忘れて、あなたがあなたの枝をリストするときにそれがあなたを煩わせないようにそれを閉じるだけでも。プッシュされたり、リストされたりしないので、心配する必要はありません。

ただし、OCDを使用している場合hg stripは、ブランチが開かれたコミットでブランチを削除()するだけで、次のようになります。

hg strip 123

既存のブランチがある場合は、次のように一度に複数のリビジョンをフェーズできます。

hg phase <start revision>::<end revision> -sf

シークレットブランチのドラフトまたは公開を行うには、これらのフェーズの最新のリビジョンをフェーズするだけです。

hg phase -d tip    //assuming you are in the experiment branch

次にプッシュすると、ブランチが公開されます。

Mercurialは、それを思いとどまらせるという一般的な哲学を変えることなく、歴史の修正においてますます良くなっています。フェーズは、偶発的な履歴の変更から保護するだけでなく、意図しないことを共有することからも保護することを目的としています。

*私*がブックマークを使用する方法

個人的には、ブックマークを使用してデバッグを行ったり、1つのことを2つの異なる方法で試したい場合に使用しています。私にとって、ブックマークは、匿名のブランチ(以前のリビジョンへの更新、履歴のコミットとフォーク)を実行したいが、物事をわかりやすくしたい場合に役立ちます。

于 2012-10-27T09:32:21.553 に答える