2016-09-25 5 views
1

私は、2つのGitリポジトリを持っているのProject1とProject2のを言う、とのProject2がProject1ののサブフォルダー:どのように2つのgitリポジトリをマージできますか?

/project1/.git (with contents of project2/ ignored) 
/project1/project2/.git 

私は同じフォルダ構造で、Project1のにのProject2をマージすることができますどのように知っていただきたいと思いますが、 project2の歴史を保つ?

私はそこに簡単な解決策を教えてください。

+5

[複数のgitリポジトリを1つにマージして分岐履歴を保持する]の可能な複製(http://stackoverflow.com/questions/26502970/merge-multiple-git-repositories-into-one-keeping-branches-history) – dmlittle

+0

私の場合、2つのgitリポジトリは同じフォルダレベルにありません – ed5978

+0

project2にブランチがありますか?はいの場合、ブランチの履歴も気になりますか? – Leon

答えて

0

を最後に、私はその後、一時フォルダにProject2の移動:

git subtree add -P project2 ~/tmp_project2 PROJECT2_BRANCH 

非常にうまくやっています。

1

project2内のすべてを最初にサブディレクトリに移動し、project2の変更されたリポジトリをproject1にマージするだけです。

あなたはproject1に支店PROJECT1_BRANCHにサブモジュールとしてproject2に支店PROJECT2_BRANCHの内容と歴史をマージしたいと仮定すると:

git clone /project1/project2 ~/tmp_project2 
cd ~/tmp_project2 
git checkout PROJECT2_BRANCH 
mkdir project2 
# The following line requires bash, it will not work in a POSIX shell. 
# It basically "git mv"s into project2 everything except .git and project2 
git ls-tree --name-only -z HEAD|{ while read -d '' f; do git mv "$f" project2; done; } 
git commit -m "Moved everything into a new subdirectory project2" 

git clone /project1 ~/project1_merged_with_project2 
cd ~/project1_merged_with_project2 
git checkout PROJECT1_BRANCH 
git remote add proj2 ~/tmp_project2 
git pull proj2 PROJECT2_BRANCH 

git remote remove proj2 
rm -rf ~/tmp_project2 
+0

わかりました。私はこれを試してみる。ありがとう – ed5978

関連する問題