プロジェクトの 4 つのバージョンがあります。バージョン 1 ~ 3 は、もともとソース管理下になかった「プロトタイプ」でした (ファイルシステム内に別のディレクトリとして存在します)。バージョン 4 は当初からソース管理下にあり、現在はコミットの長い歴史があります。
これらを組み合わせて、バージョン 1 ~ 3 が個々のチェンジセットになり、それぞれが前の子孫になるようにしたいと考えています。バージョン 4 のルートは、バージョン 3 の子孫になる必要があります (もちろん、バージョン 4 の履歴が崩壊することはありません)。
すべての変更は非公開であり、公開されていません (いわば履歴の書き換えに問題はありません)。
これまでに行ったことと試したこと:
1. プロトタイプ バージョンのディレクトリに新しい hg リポジトリをセットアップしました
2. バージョン 4 のリポジトリをクローンしました
3.hg pull --force
バージョン 1 ~ 3 の無関係なリポジトリを複製されたリポジトリ。
これにより、単一のリポジトリに 4 つの無関係な「ルート」(先祖のない変更セット) ができます。それらを組み合わせると、これらの4つのルートを覚えたくありません。 hg rebase
とは異なり、変更セットを移動してオリジナルを破棄できるようにする必要がありhg merge
ます。
ここでは101
、「バージョン 1」(親のない単一の変更セット)102
のリビジョンとして、および「バージョン 2」のリビジョンとして使用します。
試行 1: 試してみhg rebase -b 102 -d 101
ましたが、respone が得られましたnothing to rebase
。おそらくこれは、共通の祖先がないためです (これは矛盾しているように感じます...共通の祖先を除く-b 102
すべての祖先が含まれますが、この場合は何もありません。)
試行 2: やってみhg rebase -s 102 -d 101
ます。これにより、マージの競合が発生します。私はhg revert --all --rev 102
、hg resolve -m
すべての競合で「バージョン 2」を好むことを示します (ただし、追加/削除が存在する場合に、ある親を別の親よりも優先するのが本当に正しい方法なのだろうか?)。しかし、私がコミットするとき、私は直線的な歴史を持っていません --- リビジョン102
はまだそこにあります!