Help us understand the problem. What is going on with this article?

gitレポジトリ内のディレクトリを別のgitレポジトリ以下に移動する

More than 1 year has passed since last update.

具体的には

repo-A/dir1/dir2/dir3

repo-B/dir4/
以下に入れたい。
つまり、
repo-B/dir4/dir3
としたい。

repo-Aの履歴を書き換え、移行後の形に整える

cd /tmp
git clone https://github.com/repo-A
cd repo-A/
git filter-branch -f --subdirectory-filter dir1/dir2/dir3/ -- --all # dir3以外のファイルを消し、dir3以下のファイルがrepo-A以下に展開される。
git filter-branch -f --tree-filter "mkdir dir3 && git mv -k * dir3/" # 履歴の書き換え。dir3ディレクトリを作って、mv。
git filter-branch -f --tree-filter "mkdir dir4 && git mv -k * dir4/" # さらに成型。dir4を作って、mv

lsして、repo-A以下が移行したいフォルダ構成になっているか確認.

/tmp/repo-A/dir4/dir3
 $ ls
file1 file2

作った(移行したい)レポジトリ(repo-A)を、移動先(repo-B)のリモートに登録する。

cd tmp
git clone https://github.com/repo-B
cd repo-B
git remote add work file:///tmp/repo-A

リモートの確認.

git remote -v
origin  https://github.com/repo-B/ (fetch)
origin  https://github.com/repo-B/ (push)
work    file:///tmp/repo-A (fetch)
work    file:///tmp/repo-A (push)

移行後のレポジトリ(repo-B)にマージして、pushする

git checkout -b work-branch # ブランチを切って作業
git fetch work # work(リモート)を取り込む
git merge work/master
git push user work-branch # work-branch(リモートブランチ)にpushする
yasano
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away