複数のgitリポジトリを履歴を残したまま統合する
引き継いだプロジェクトが、foo_pc, foo_sp, foo_commonみたいなかんじでリポジトリが分かれていて、同じ機能の開発やっているのにそれぞれにPullReqだしたり、リリースノートを書いたりするのがしんどいので、統合した。以下に統合した時の手順をまとめておく。
まず、新しくリポジトリを用意して、以下のように統合したいリポジトリ毎にディレクトリを作成して(.gitkeepとか用意して)、コミットする。
foo ├── foo_common ├── foo_pc └── foo_sp
次のようなスクリプトを実行する。git 2.9 から無関係なヒストリもってるブランチ同士をマージするときは --allow-unrelated-histories つけないとエラーになるのがハマりどころ。
for repo in foo_pc foo_sp foo_common; do git remote add ${repo} ~/${repo} git merge -s ours --no-commit --allow-unrelated-histories ${repo}/master git read-tree --prefix=${repo} -u ${repo}/master git commit -am "Merge in ${repo}." done