既存のGitレポジトリから新しいレポジトリへ複数の要素を分割する (不完全)
既にあるレポジトリの一部をコミット履歴ごと別のレポジトリに移したいという例のアレです。
(repo_A) ├aaa/ ├bbb/ ├ccc └ddd
という構成の既存レポジトリがあって、これを元に次の新しいレポジトリ
(repo_B) ├aaa/ └ccc
としたい。
まず複製する
mkdir repo_B git clone repo_A repo_B
そして残したい物を列挙して次を実施
cd repo_B git filter-branch -f --prune-empty --index-filter 'git rm --cached -r -q -- . ; git reset -q $GIT_COMMIT -- aaa ccc' -- --all
これで指定以外のファイルのコミットログが削除される。
後はリモートレポジトリ設定を書き換えてpushすればよい
git remote set-url origin git@github.com/ki38sato/repo_B.git git push -u origin master
というのを試してみたのだが、移動しなかったファイルのコミットも新しい方に残るんだなコレ。不完全だったか。
(マージプルリクだから?)
ただ正直よくわからずコピペで試した段階なのでまだよくコマンド理解してない。
初めはsubdirectory-filterとか調べてるうちは理解できていたのだが、
複数要素選択どうするんだろうってなって
StackOverflow見て試したのがイマココ
普段sourcetree使ってる情弱だが後で気が向いたら調べたい (汗