まぁ 特定リポジトリ内のディレクトリを別リポジトリへ移動したいというケース。(共通コードを別リポジトリのライブラリへまとめたい)
履歴を気にしないのであれば単純なコピーで良いのだけど、gitを使っている以上は活かしたい。
なので、履歴を生かしたままコピーを行い、もとは削除という形で移動。
単純に特定リポジトリ内のディレクトリを別リポジトリへ移動したいというケース。
# 移動元のリポジトリをクローンしてディレクトリ構造を整形 cd /tmp rm -rf temp_cms5_lib git clone git@github.com:cic-asahina/riken-cms.git temp_cms5_lib cd temp_cms5_lib # cms5_lib以外のファイルを消し、cms5_lib以下のファイルがtemp_cms5_lib以下に展開される。 git filter-branch -f --subdirectory-filter src/server/cms5_lib/ -- --all # 移動後のディレクトリ構造合わせる git filter-branch -f --tree-filter "mkdir -p include/cms5_lib/ && git mv -k * include/cms5_lib/" cd /tmp rm -rf cms_lib git clone git@github.com:cic-asahina/cms_lib.git cms_lib cd cms_lib git remote add work1 file:///tmp/temp_cms5_lib/ git remote -v # origin git@github.com:cic-asahina/cms_lib.git (fetch) # origin git@github.com:cic-asahina/cms_lib.git (push) # work1 file:///tmp/temp_cms5_lib/ (fetch) # work1 file:///tmp/temp_cms5_lib/ (push) # work1を取り込む git fetch work1 git merge --allow-unrelated-histories work1/main # pushする git push # 後始末 cd /tmp rm -rf temp_cms5_lib rm -rf cms_lib
元リポジトリの複数ディレクトリを切り出し、別リポジトリへ移動したいというケース。
# 移動元のリポジトリをクローンしてディレクトリ構造を整形 cd /tmp rm -rf temp_riken-ems_remove_mutex git clone git@github.com:cic-asahina/riken-ems.git temp_riken-ems_remove_mutex cd temp_riken-ems_remove_mutex # remove_mutex以外のファイルを消し、remove_mutex以下のファイルがtemp_riken-ems_remove_mutex以下に展開される。 git filter-branch -f --subdirectory-filter src/server/remove_mutex/ -- --all # 移動後のディレクトリ構造合わせる git filter-branch -f --tree-filter "mkdir -p remove_mutex/ && git mv -k * remove_mutex/" # 移動元のリポジトリをクローンしてディレクトリ構造を整形 cd /tmp rm -rf temp_riken-ems_wait_for_reload git clone git@github.com:cic-asahina/riken-ems.git temp_riken-ems_wait_for_reload cd temp_riken-ems_wait_for_reload # wait_for_reload以外のファイルを消し、wait_for_reload以下のファイルがtemp_riken-ems_wait_for_reload以下に展開される。 git filter-branch -f --subdirectory-filter src/server/wait_for_reload/ -- --all # 移動後のディレクトリ構造合わせる git filter-branch -f --tree-filter "mkdir -p wait_for_reload/ && git mv -k * wait_for_reload/" cd /tmp rm -rf web_app_lib git clone git@github.com:cic-asahina/web_app_lib.git web_app_lib cd web_app_lib git remote add work1 file:///tmp/temp_riken-ems_remove_mutex/ git remote add work2 file:///tmp/temp_riken-ems_wait_for_reload/ git remote -v # origin git@github.com:cic-asahina/web_app_lib.git (fetch) # origin git@github.com:cic-asahina/web_app_lib.git (push) # work1 file:///tmp/temp_riken-ems_remove_mutex/ (fetch) # work1 file:///tmp/temp_riken-ems_remove_mutex/ (push) # work2 file:///tmp/temp_riken-ems_wait_for_reload (fetch) # work2 file:///tmp/temp_riken-ems_wait_for_reload (push)git checkout -b main # work1/work2を取り込む git fetch work1 git merge --allow-unrelated-histories work1/main git fetch work2 git merge --allow-unrelated-histories work2/main # pushする git push # 後始末 cd /tmp rm -rf temp_riken-ems_remove_mutex rm -rf temp_riken-ems_wait_for_reload rm -rf web_app_lib
FYI: https://qiita.com/yasano/items/f9248eb99850a872b0a8
デフォルトが masterから mainに変わっている