2

「stable」と「beta」の2つのメジャーリリースブランチがあります。時間の経過とともに、「ベータ」ブランチは安定に進まなかった変更を受け取りましたが、削除されることはありませんでした。

私がやりたいのは、ベータ版を再び安定版と同期して、まったく同じにすることです。同じブランチ名を維持しながら、これはMercurialで可能ですか?

ブランチでの受信コミットがすべてのウェブサーバーにプッシュされるベータ版の基本的なデプロイが設定されています。安定した状態から新しいブランチを開始することもできますが、それでは混乱が生じます。

基本的に私はこれをしたい:

hg update stable
hg branch beta --overwrite
4

2 に答える 2

2

バックアウトソリューション

(ブランチの履歴にない)結果から除外するために、a)ベータブランチで「停止した」チェンジセットをバックアウトすることができますb)ベータに安定してマージします

リベースソリューション

追加のブランチを作成し、不要なチェンジセットをこのブランチにリベースし、安定してベータ版にマージします

MQソリューション

mqをインストールし、問題のチェンジセットをMQパッチに変換し、すべてのmqパスを適用解除し、安定してベータ版にマージします

添加

ベータ版の不要なチェンジセットが不明な場合

(コマンドのソースとして使用されるRy4anグラフ)

差分パッチ方式

アイデア:ベータ版に「修正チェンジセット」を追加します。これにより、ベータ版がブランチstable@6の状態と同じ状態になります。

実装:hg up beta & hg diff -r beta -r stable | hg import - & hg commit -m "Beta synced"

新しい分岐方法

アイデア:古い古いブランチベータを忘れて、ゼロからベータを作成し、安定した現在の状態

実装:hg up beta & hg commit -m "Closing branch" --close-branch & hg up stable & hg branch -F beta & ... & hg commit -m "Reopen new beta"

于 2013-01-18T07:08:05.097 に答える
2

Mercurialブックマークを使用していた場合は、そうです。ブックマークはチェンジセットへのポインターであるため、ブックマークを強制的に任意の場所にポイントさせることができます(ブックマークは、知っている場合はgitブランチによく似ています)。Mercurialの名前付きブランチは、すべてのチェンジセットに付けられた消えないラベルです。名前付きブランチについて話している場合、「ヘッド」はそのブランチ名を持つ「最も先端の」(本質的に最新の)チェンジセットであるため、そのブランチを持つすべての祖先を削除せずに古いチェンジセットをヘッドにすることはできません。名前。

これが役立つかもしれない図です。各チェンジセットの「ブランチ」はそのブランチ名です(すべてのチェンジセットにはブランチ名がありますが、そうである場合default、ほとんどのUIコンテキストには表示されません)。

  [0]  (branch: default)
   |
  [1]  (branch: default)
   | \
  [2] \    (branch: default)
   |   [3]   (branch: beta)
  [4]   |    (branch: stable)
   |   [5]   (branch: beta
  [6]        (branch: stable)

この図には、2つのトポロジカルヘッド、チェンジセット6と5がありますが、合計3つのヘッド、2、5 、および6があります。

betaチェンジセット5は、そのブランチ名を持つ「最新の」チェンジセットであるため、ブランチのヘッドです。stableチェンジセット6は、そのブランチ名を持つ「最新の」チェンジセットであるため、ブランチのヘッドです。defaultまた、チェンジセット2は、その名前が付いた最新のチェンジセットであるため、ブランチのヘッドです。

したがって、あなたの質問を理解した場合、betaすべてのチェンジセットが1つのブランチにのみ存在するため、1つのブランチを安定させるチェンジセット6をブランチのヘッドにすることはできません。したがって、単一のチェンジセットをヘッドにすることはできません。 2つの異なる名前付きブランチ。

ただし、オプションはたくさんあります。

ブランチベータで、現在の安定版のヘッドとまったく同じように見える新しいチェンジセットを作成します。

 hg checkout stable # makes the working directory look like changeset 6
 hg branch beta     # tell mercurial that the next changeset created should be on branch 'beta'
 hg commit         # creates changeset 7 on branch beta w/ contents of changeset 6

(「変更なし」を回避するために)そこでコミットする前に、いくつかの小さな変更を加える必要があるかもしれませんが、それがその要点です。新しいチェンジセットには6のファイルがありますが、ブランチラベルが「beta」で5よりも新しいため、「beta」の新しいヘッドになります。

また

ブックマークの使用に切り替えます。ブックマークは、ブランチが機能することを想像している方法に似ています。それらはチェンジセットへのポインターであり、複数のポインターが同じチェンジセットを指すことができます。

于 2013-01-18T03:43:59.577 に答える