7

リポジトリを Subversion から Mercurial に変換したいのですが、最初にリポジトリをセットアップしたときは、可能な限り怠惰な方法で行いました。時間が経つにつれて、構造は変形し、劣化し続けました (この時点で 5 年前です)。とはいえ、汚れて手動でつなぎ合わせる必要があるとしても、できるだけ多くの履歴を保存したいと考えています。

さらに苦労することなく、現在の構造は次のようになります。

svn://svn.example.com/Example
    + trunk
        + BigProject
        + BinaryDepedencies
    + branches
        + BigProject
            + branch1
            + feature1
            + maintenance1
            + ...
    + tags
        + BigProject
            + tag1
            + tag2
            + ...
    + projects
        + small_project1
        + small_project2
        + small_project3
        + ...

これが最新の構造であることを考えると、このリポジトリに希望はありますか? 希望がない場合は、Mercurial (または bazaar) で手動で歴史を再構築するための良いアプローチを誰かが持っています。

また、さまざまな理由から、この特定のリポジトリを Subversion から git、さらには hg/bzr に変換する防弾戦略がない限り、git を使用することはできません。

4

2 に答える 2

7

1つの戦略は、トランクを変換することかもしれません。トランクが移動した場合は、いくつかのゲームをプレイする必要があるかもしれませんが、それほど難しくはありません。

兵器庫のもう1つのツールは、hg->hg変換とリベース拡張です。これらを使用して、hgリポジトリにあるものを取得した後、ツリーをいじり、変換した後にブランチに移植することができます。または、移動後にトランク履歴の新しい部分を移植します。

Mercurialリベース拡張機能に関するドキュメントへのリンクは次のとおりです。

基本的に、従う戦略は次のとおりです...まず、convert拡張機能またはhgsvnを使用して、リポジトリの一部を変換します。これにより、トランクの複数のライン、またはメインラインとは別のリポジトリにあるブランチが発生する可能性があります。

別々のリポジトリにトランクの2つのセクションがあり、と呼ばれるディレクトリにあるセクションが、と呼ばれるディレクトリにあるセクションのsecond直後にある場合は、次のようfirstに実行できます。

cd second
hg log -r 0
# Note the revision hash
cd ../first
hg tip
# Again, note the revision hash
hg pull -f ../second
hg rebase --source <revision hash from hg log -r 0> --dest <revision hash from hg tip>

これにより、トランクの1つのセクションがトランクの別のセクションに移植されます。

別のリポジトリにブランチがある場合、手順は少し複雑です。

cd branch
hg log -r 0
# Note the revision hash
cd ../trunk
# Find the revision that the branch branches off from and note its hash.
# We will call this revision the 'branch base'.
hg pull -f ../branch
hg rebase --source <revision hash from hg log -r 0> --dest <revision hash of branch base>

これにより、ブランチがメインツリーに移植されます。

于 2010-01-20T17:16:50.903 に答える
3

convert 拡張機能の docsによると、次のようなものが機能するはずです。

$ cat > ~/.hgrc <<EOF
[extensions]
hgext.convert=
EOF
$ hg convert --config convert.svn.trunk trunk/BigProject --config convert.svn.branches branches/BigProject --config convert.svn.tags tags/BigProject svn://svn.example.com/Example newhgrepo
于 2010-01-20T17:20:52.810 に答える