2017-07-29 21 views
0

私が現在取り組んでいるプロジェクト(例えば、名前は "rinjani")では、複数の水銀リポジトリ(約10個の別々のリポジトリ)があります。それを単一のレポに変換します。Mercurial(hg):複数のリポジトリを単一のリポジトリに変換する

実際:期待

- rinjani-a 
- rinjani-b 
- ... 
- rinjani-g 

rinjani 
├── rinjani-a 
├── rinjani-b 
├── ... 
└── rinjani-g 

これを行うための最善の(最も安全な)方法は何ですか?私はblogpostの後にこれを読んだが、それは2つの別個のリポジトリだけが展示されているので、それが行く方法であるかどうかまだ分かっていない。もちろん、各レポからの履歴/チェンジセットをそのまま維持したいと考えています。

答えて

2

mvhg addremove --similarity 100の手順はhg renameを使用して簡略化することができますが、ブログポストは基本的な方法です。

基本手順:

  1. 新しいリポジトリを作成します。
  2. 古いリポジトリの1つを強制的にプルします。
  3. ヒントを更新し、古いリポジトリファイルの名前を新しい場所に変更します。
  4. コミット
  5. 他のレポジトリでは2-4を繰り返します。
  6. すべてをまとめてください。

例:

hg init rinjani 
cd rinjani 
hg pull -f <path_to>\rinjani-a 
hg update tip 
md rinjani-a 
hg rename * rinjani-a 
hg ci -m "renamed rinjani-a" 
<repeat for other projects> 

そして一緒にヘッドの各々を "HGマージ"。

もちろん、すべての変更操作は新しいリポジトリに対してのみ行われるので、これは完全に安全です。間違えた場合は、いつでもやり直すことができます!

@ 5:renamed rinjani-c files 
| 
o 4:rinjani-c file 

o 3:renamed rinjani-b files 
| 
o 2:rinjani-b file 

o 1:renamed rinjani-a files 
| 
o 0:rinjani-a file 

次にヘッド(REV 1、3、およびこの場合は5)をマージ:

はここで非常に簡単なグラフは上記のスキームを使用してマージされる3つのリポジトリを準備した後のように見えるかもしれないものです。キーポイントは、それらを一緒にマージする前に独立した履歴の頭を変更することです:

@ 7:Merge 
|\ 
| o 6:Merge 
| |\ 
| | o 5:renamed rinjani-c files 
| | | 
| | o 4:rinjani-c file 
| | 
| o 3:renamed rinjani-b files 
| | 
| o 2:rinjani-b file 
| 
o 1:renamed rinjani-a files 
| 
o 0:rinjani-a file 
+0

は、[OK]を、 'md'は' mkdir'の別名である、私は考えますか? 'hg rename * rinjani-b'は、' rinjani-b'の中で 'rinjani-a'を動かすので、他のreposのためにステップ2-4を繰り返す際に問題があります。また、最後に各レポに複数のヘッドがある場合、どのレポをマージする必要がありますか?先端? –

+0

@GlennMohammad各リポジトリの 'hg pull -f'を実行すると、マージなしの独立履歴として表示されます。最後まで頭を合併させないでください。 'hg rename * rinjani-b'は' rinjani-a'ファイルを表示しません。すべての履歴が最終的な場所にリネームされたら、それぞれのヘッドをまとめます。 rinjani-bの履歴をrinjani-aに、次にrinjani-cをその結果にマージします。 –

+0

'md'と' mkdir'は同等です...少なくとも私が使っているWindowsでは。 –

関連する問題