2011-01-26 20 views
4

Mercurialからgitに切り替えていて、hg-fast-exportを正常に使用しています。今私はトリッキーな状況があります。私は、ブランチごとに別々のhgリポジトリを使用しているプロジェクトを持っています。これらを、適切なブランチを持つ単一のgitリポジトリに変換し、可能であればhgチェンジセットを保持したいと考えています。複数のhgリポジトリを複数のブランチを持つ単一のgitリポジトリに変換する

だから、現在の構造は次のようになります - 各フォルダは、HGリポジトリです:

Project-v1.0 
Project-v2.0 
Project-v3.0 

私は3本の枝が含まれている「プロジェクト」と呼ばれる単一gitリポジトリで終わるしたい、v1.0を、V2 .0とv3.0。

これは可能ですか?

答えて

2

hgリポジトリが1つのベースリポジトリからのクローンである場合、hggit拡張子を使用して1つのgitリポジトリにエクスポートできます。あなたはVonCが言及したグラフトポイントソリューションを使用する必要があり、あなたの枝が異なるHGレポは関係ないなら、あなたが必要とするすべての

cd b1; mkdir ../gb1 && git init --bare ../gb1 && hg push ../gb1; cd .. 
cd b2; mkdir ../gb1 && git init --bare ../gb2 && hg push ../gb2; cd .. 
cd b3; mkdir ../gb1 && git init --bare ../gb3 && hg push ../gb3; cd .. 
# now you have one git repo for each hg branch 

cd gb1 
git remote add gb2 ../gb2 
git remote add gb3 ../gb3 
git fetch --all 
# now you have all branches in the gb1 repo 
rm -r ../gb2 ../gb3 
# the other repos are now not used anymore 

にある、ディレクトリのB1 /、B2 /及びB3 /に住んでいると言います。

1

これを用いて可能であるべきである:リモートとしてProject-v2.0を追加し、 'v2.0でそれをフェッチすることにより

Project-v1.0 Gitのレポに Project-v2.0履歴をインポート3つのMercurialのもの
  • (3から別個Gitのリポジトリを作成
    • 'ブランチ:2つの異なるルーツが作成されます)
      graft pointを介して、2つのブランチを互いにリンクします(HEADv1.0ブランチになります)。最初のコミットの親はv2.0ブランチです)。

    (すなわち、あなたのレポに限定されない)、それらのグラフト点を永続的にfilter-branchを使用して(、HEADv2.0の枝にグラフトされた、別々のv3.0ブランチに最初の1にフェッチ、Project-v3.0のために繰り返し

    SOの質問 ""にも同様のシナリオがあります(ただし、「追加前」ではなく「追加前」)。

  • 関連する問題