1

SVN リポジトリを Mercurial に変換しようとしています。数百回前のリビジョンでは、trunk のサブディレクトリ (trunk 全体ではなく) からブランチが作成されました。

trunk
  * subdir
  * ...
branches
  * foo (forked from subdir)
  * ... (other branches fork from trunk)
tags
  * ...

convert 拡張機能を使用してリポジトリを変換しようとしましたが、foo が問題を引き起こしています。トランクからのブランチではなく、「subdir」という名前の新しいブランチからのブランチとして、変換されたリポジトリに表示されます。サブディレクトリ ブランチはトランクと同様であり、トランクに加えられた変更はすべてサブディレクトリに複製されます。

変換後のリポジトリの要約を次に示します。

  .
  .
  |
  *  202  foo      Created foo branch
. |
. *  201  subdir   Added XYZ
| |
* .  200  default  Added XYZ
| .
. .
. |
. *    4  subdir   Fixed DEF
| |
* |    3  default  Fixed DEF
| |
| *    2  subdir   Added ABC
|  
*      1  default  Added ABC

それ以外の:

  .
  .
. |
. *  101  foo      Created foo branch
|/
*    100  default  Added XYZ
|
.
.
.
|
*      2  default  Fixed DEF
|  
*      1  default  Added ABC

分岐が 2 番目の図と一致するように、リポジトリを (変換前または変換後に) 修正するにはどうすればよいですか?

4

1 に答える 1

0

変換後の方法

次の 2 つのタスクがあります。

  • サブディレクトリ ブランチから重複するリビジョンを削除する
  • foo ブランチの最初の実際の変更セットの親を変更します

「サブディレクトリ」で202より前の変更セットを強制終了するには、さまざまな方法を使用できます

  • MQ (2 つのバージョン)
    • 変更セットを mq-patches に変換し、すべてのパッチを適用解除し、パッチを削除します
    • 変更セットを mq-patches に変換し、すべてのパッチを適用解除し、リポジトリを新しいものに複製し、新しいものを永久に使用します
  • Histedit 拡張機能 (TortoiseHG に同梱) - すべての不正なコミットを有効化、使用、削除

foo ブランチを右の親にリンクする

hg rebase -s 202 -d 200(最初のグラフによると、ハッシュまたはブックマークを使用して/追加/すると、より適切で防弾になります)。「サブディレクトリ」の分離された変更セットは、後に消えますhg clone -r tip

于 2012-11-28T09:09:56.040 に答える