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«
。