やりたいこと
./src ├── frontend │ ├── node_modules │ ├── public │ └── src -------------------------------- ↑リポジトリAで管理 ↓リポジトリBで管理 -------------------------------- ├── main │ ├── java │ └── resources └── test └── java
ひとつのリポジトリからファイルを切り出して別のリポジトリで管理できるように分割する
方法
メインとなるローカルリポジトリとリモートリポジトリを作成し、そちらにcommit /pushして、コードを格納する。 (手順は省略します)
サブとなるリモートリポジトリを作成
サブディレクトリを作成したい階層に移動して2で作成したリポジトリをクローン(先にローカル環境でディレクトリを作成している場合はこの手順は不要です)
プロジェクトのルートディレクトリにて、下記コマンドを実行します。
git filter-branch --subdirectory-filter [任意のpath] HEAD
注意 pathを指定する際に/をpathの末尾に付けないと下記のようなエラーが発生しました。
failed to unpack tree object Could not initialize the index
上記コマンドを実行すると、下記のように履歴が書き換えられた旨が表示されます。
Ref 'refs/heads/main' was rewritten
試しにルートディレクトリでls
コマンドを実行してみると、frontend配下のソースのみ表示されるはずです。
git remote set-url origin [作成したリモートリポジトリのURL]
その後にサブディレクトリのソースたちをinitしてaddしてcommitしてから、pushします。 リモートリポジトリにソースが格納されて入れば完了です。