7

私は主に SVN を使用するチームで働いていますが、可能であれば Mercurial を使用することを好みます。hgsubversion を使用して SVN リポジトリの hg クローンをセットアップしたところ、いくつかの基本的なプル/コミット/プッシュが正常に機能しているように見えました。

2週間のローカル開発の後(その間、外部のhgリポジトリからの変更をマージし、SVNリポジトリからの変更を複数回マージしました)、SVNリポジトリにプッシュしようとしましたが、これで失敗しましたメッセージ:

中止: 申し訳ありませんが、マージ リビジョンの svn 親が見つかりません。

他のユーザーが同じ問題に遭遇し、この問題を今後回避する方法についてのハウツーを見つけましたが、既存の hgsubversion リポジトリをクリーンアップするために複数の並列コミットを凝縮することに対処しているように見えるものには遭遇していません。

自分のコミットを失わずに問題を修正できる最善の方法は何ですか? (ステップバイステップの説明付き?)

4

1 に答える 1

9

SVN はそれらを理解できないため、hg マージを subversion リポジトリにプッシュすることはできません。最新の SVN コミットの上に変更をリベースする必要があります。

ステップを編集して履歴を平坦化します。

警告、多くのマージ競合が発生するように準備してください

mq と rebase 拡張機能を有効にする必要があります

最初のステップは、バックアップ リポジトリを作成することです。これは、今後のマージ競合の参照として必要になるためです (それらの多くが予想されます)。

グラフが次のようになっているとします。

C1--C2--C3------M1--C5--C6--C7---M2--
  \            / \              /
   \--B1--B2--/   \--B3--B4-B5-/

次に、C3 の上に B1+B2 をリベースします。hg rebase -b B2 -d C3

-bリベースするブランチの開始点として両方のブランチの共通ベースを使用するため、mercurial は B1 が最初の偏差コミットであることを検出し、B2 をリベースする場合でもこれを使用します。 -dリベースされたブランチの宛先を指定します。

マージの競合が発生した場合は、B2' = M1 の結果であることを確認してください。そうしないと、次のリビジョンで多くの競合が発生します。

その後、Merge M1 はなくなり、グラフは次のようになります。

C1--C2--C3--B1'--B2'--C5'--C6'--C7'---M2'--
                   \                 /
                    \--B3'--B4'-B5'-/

次に、2 番目の merge: に対して同じことhg rebase -b B3' -d C7'を行います。これにより、レポは次のようになります。

C1--C2--C3--B1'--B2'--C5'--C6'--C7'--B3''--B4''--B5''

すべての線形バージョン履歴ができるまで繰り返します。

履歴を平坦化したら、svn コミットの上にコミットを並べ替える必要があります。リポジトリが次のようになったとします (S=subversion コミット、C=ローカル コミット):

S1--S2--S3--C1--C2--S4--S5--C3-C4--C5--C6--C7--S6--S7

ここで、C1 (を含む) からのすべてを Mercurial キュー ( ) にインポートしますhg qimport -rC1:。作成されたすべてのパッチを表示するには、 を使用しますhg qseries

次に、すべてのパッチを適用解除します (hg qgoto C1.diff [this is the first one in qseries]の後に が続きますhg qpop)。次に、Subversion のものを削除します ( hg qdelete S4.diff S5.diff S6.diff S7.diff)。

ここで、svn コミット ( ) を再取得しhg pull »svn-remote«ます。次に、すべてのローカル パッチを 1 つずつ再適用しhg qpush、現在発生しているすべてのマージの競合を修正します。1 つのコンフリクトが終了したら、現在のパッチを で Mercurial コミットに移動し、hg qfinish -a現在の状態を で送信できますhg push »svn-remote«

于 2011-03-17T12:20:36.347 に答える