でこれを行うことができますgit filter-branch
。基本的に、次のことを行います。
- 既に見つけたリンクを使用して、最初のプロジェクトのサブパスを新しいリポジトリに分割します。
- 一意のブランチの 2 番目のプロジェクトのリモートにプッシュします。
そのブランチを 2 番目のリポジトリに取得し、それを使用git filter-branch
して正しいサブディレクトリにインデックス フィルター処理します。
git filter-branch --index-filter '
git ls-files -sz |
perl -0pe "s{\t}{\tnewsubdir/}" |
GIT_INDEX_FILE=$GIT_INDEX_FILE.new \
git update-index --clear -z --index-info &&
mv "$GIT_INDEX_FILE.new" "$GIT_INDEX_FILE"
' HEAD
最後にmaster
、2 番目のプロジェクトのブランチ (または使用しているブランチ) をチェックアウトし、新しくフィルター処理されたブランチにマージします。
本当にひどい手術ではありません。AlexanderGladysh がコメントで指摘しているように、ステップ 3 と 4 の代わりにサブツリー マージ戦略を使用することもできます。