2012-03-20 10 views
9

Gitリポジトリとは無関係(祖先チェックインを共有しない)が2つあります。 )。もう一つは、小規模なプロジェクト(リポジトリBと呼ぶことができます)用の現地のGitリポジトリです。グラフィカルに、それは理想的には、この2つの独立したGitリポジトリを1つの履歴タイムラインで1つに結合する方法

A0-B0-C0-D0-E0-F0-G0-HEAD (repo A) 
A0-B0-C0-D0-E0-F0-G0-HEAD (remote/master bare repo pulled & pushed from repo A) 
A1-B1-C1-D1-E1-HEAD (repo B) 

ようになり、私は本当に、単一の歴史のタイムラインでレポAにレポBをマージしたいと思います。だから私は(プロGitはかなり良い本である方法によって、サブモジュールとサブツリーで読んいくつかをやってきた私はもともとグラフィカルレポA.でプロジェクトを開始し、これは理想的な最終結果

A0-A1-B1-B0-D1-C0-D0-E0-F0-G0-E1-H(from repo B)-HEAD (new repo A) 
A0-A1-B1-B0-D1-C0-D0-E0-F0-G0-E1-H(from repo B)-HEAD (remote/master bare repo pulled & pushed from repo A) 

であろうと、それを見えます)、両方とも、サブモジュールが上流とサブツリーからの変更をわずかに頭痛の少ないものにすることができる2つの独立した支店を維持するという解決策に対応しているようです。どちらの解決策もマスターとサブツリー/モジュールブランチ間のチェックインとシンクを処理するための追加の特殊なgitコマンドが必要です。どちらのソリューションでも、複数のタイムラインが生成されます(サブツリーでは、 - スカッシュを使用する場合でも3つのタイムラインが得られます)。

SOから最も近い解決策は「graft」について話しているようですが、それは本当ですか?目標は、チェックインをプル/プッシュすることができる単一の統合されたリポジトリを持つことです。これにより、Repo Bがなくなり、最後にAを追加するだけです。

+0

可能重複http://stackoverflow.com/questions/1425892/how-do-you-merge-two-git-repositories ) –

+0

@MichaelDurrantいいえ、シナリオが同じでないため、サブツリーとサブモジュールの解決策を拒否します – Antony

答えて

5

私はあなたがこのようにそれを行うと思う:

  1. Gitはリモートリポジトリにレポbを取得フェッチ[レポB]
  2. のgitを追加//あなたは歴史を維持したいが原因
  3. (レポB由来)-HEAD(新規レポA) A0-A1-B1-B0-D1-C0-D0-E0-F0-G0-E1-Hは、最初にA0を開始点として選択することができますその後、git cherry-pickを1つずつ使用してください。

希望はあなたにとって役に立ちます。

Brで、 ティム

[次の2つのgitリポジトリをマージするにはどうすればよい?](の
+0

このガイドと共にソリューションを組み合わせました@ http://gbayer.com/development/moving-files-from-one-git-repository-別の - 保存歴史/、それは動作します! – Antony

関連する問題