1. ホーム
  2. git

[解決済み] Git フォルダをサブモジュールに遡及的に変換する?

2022-06-15 12:06:35

質問

ある種のプロジェクトを書いていて、しばらくすると、プロジェクトのいくつかのコンポーネントがスタンドアロンのコンポーネント (おそらくライブラリ) として実際に有用であることが明らかになる、ということはよくあります。早い段階からそのような考えを持っていたのであれば、そのコードのほとんどが専用のフォルダーにある可能性がかなりあります。

Gitプロジェクトのサブディレクトリの一つをサブモジュールに変換する方法はありますか?

理想的には、そのディレクトリ内のすべてのコードが親プロジェクトから削除され、代わりにサブモジュールプロジェクトが追加され、すべての適切な履歴があり、すべての親プロジェクトのコミットが正しいサブモジュールのコミットを指すような状態にすることです。

どのように解決するのですか?

サブディレクトリを独自のリポジトリに分離するためには filter-branch を使います。

git clone <your_project> <your_submodule>
cd <your_submodule>
git filter-branch --subdirectory-filter 'path/to/your/submodule' --prune-empty -- --all

あとは、元のディレクトリを削除して、サブモジュールを親プロジェクトに追加するだけです。