Gitで開発していて、あるサブディレクトリ以下を別のレポジトリに移行したいと思うことがある。今回はそういうことをしてみたのでメモ。
まずGitHubにそのようなやり方の指南がある(Splitting a subfolder out into a new repository - GitHub Docs)。大体これで良いのだけれど、このやり方だとサブディレクトリのpathがそのままになってしまうという問題がある。大抵のケースで、あるサブディレクトリを別のレポジトリに分割したいとなった時、そのサブディレクトリがレポジトリルートに来てほしい。
そういう場合はGit Filter Repo — Splitting a Subfolder Into A New Repository | by Edward Ezekiel | Mediumにも紹介されているようにgit filter-repo --subdirectory-filter
を使えばいい。これを使えば自動的にサブディレクトリがレポジトリルートになるように移行してくれる。
今回自分はhttps://github.com/shibayu36/go-playground/tree/main/diaryをhttps://github.com/shibayu36/go-diary-apiへ移行したかった。その時に使ったコマンドはこちら。
brew install git-filter-repo cd ~/Downloads git clone git@github.com:shibayu36/go-playground.git # freshなrepositoryを用いないと危険(filter-repoが警告を出してくれる) cd go-playground/ git filter-repo --subdirectory-filter diary/ git remote add origin git@github.com:shibayu36/go-diary-api.git git remote -v # 確認 git push -u origin main
結構簡単に移行できて便利ですね。