Git で複数のリポジトリをまとめたり、逆に切り出したりする

  • 439
    いいね
  • 8
    コメント
この記事は最終更新日から1年以上が経過しています。

~/repo1 と ~/repo2 をまとめる

2つのリポジトリをまとめて1つのリポジトリにしたいとき。

cd ~/repo1
git remote add repo2 ~/repo2
git fetch repo2

git merge repo2/master

~/repo1/subdir に ~/repo2 を入れる

あるリポジトリのサブディレクトリに別のリポジトリの中身を入れたいとき。たとえば、あるリポジトリのサブディレクトリを切り出して別のリポジトリとして管理しているものを、元のリポジトリに合流させたいとき。

cd ~/repo1
git remote add repo2 ~/repo2
git fetch repo2

# サブディレクトリの内容に repo2 の内容をマージする
# (repo2 と内容が似ているサブディレクトリを自動で判別)
git merge -s subtree repo2/master

# ↑でうまくいかないときにはパスを指定する↓
git merge -X subtree=subdir repo2/master

# そもそも ~/repo1/subdir が存在しないときには↓
git read-tree --prefix=subdir/ repo2/master
git checkout -- .

~/repo1/dir1 と ~/repo1/dir2 をマージする

(タイトルからは外れるが)同一リポジトリ内の2つのサブディレクトリをマージしたいとき:http://qiita.com/uasi/items/545665066619d8cb8dbe

~/repo1/subdir を ~/repo2 として切り出す

あるリポジトリのサブディレクトリを別のリポジトリとして管理したいとき。

git clone ~/repo1 ~/repo2
cd ~/repo2
git filter-branch --subdirectory-filter subdir HEAD

余談:ここで git clone の代わりに git-new-workdir を使ってはいけない(コメント参照

参考にしたページ: