特定ディレクトリ配下のコミットのみを抽出して別のGitリポジトリとして管理し直す方法について説明する。
手順
-
フィルターを使用して履歴を抽出
git filter-repo
を使って、特定ディレクトリのみの履歴を抽出する。これはgit filter-branch
の推奨代替ツール。- 事前に
git filter-repo
をインストールしておく。
pip install git-filter-repo
-
一時的なクローンの作成
- 元のリポジトリをクローンする。
git clone --no-local --no-hardlinks <元のリポジトリのパス> temp-repo
cd temp-repo -
フィルタリング実行
git filter-repo
を使用して特定ディレクトリ配下の履歴のみを抽出する。
git filter-repo --subdirectory-filter subdir
-
新しいリポジトリの作成
- 抽出した履歴を新しいリポジトリに移行する。
cd ..
git clone temp-repo new-repo
cd new-repo -
不要なリポジトリの削除
- 一時的に作成したリポジトリを削除する。
cd ..
rm -rf temp-repo
補足
subdir
は新しいリポジトリのルートディレクトリになる。git filter-repo
を使用する場合、Python 3.5以降が必要。- 元のリポジトリをそのまま残したい場合は、クローンを 使用するが、元のリポジトリを直接操作しても構わない。
この手順に従えば、特定ディレクトリ配下のコミットのみを新しいリポジトリとして抽出して管理することができる。