問題
私の理解が正しければ、あなたの git 履歴にはsrc、AAA、BBBの 3 つのフォルダーがあります。基本的に穴の歴史については、srcしかありませんでした。最終的に、ファイルをsrcからAAAとBBBに分けてsrcを削除し、他の 2 つを作成する1 つのコミットを作成しました。
回路図の履歴ビュー (gitk のように、各行がコミットで、最新/最新のコミットが一番上にあります):
AAA, BBB
src
src
src
src
.
.
.
を使用すると、フォルダーAAAgit filter-branch --prune-empty -subdirectory-filter AAA
内にない履歴内のすべてのコミットからすべてが削除されます(その後、AAAが新しいルート ディレクトリになります)。フォルダーAAAは、履歴の単一のコミットにのみ存在するため、この単一のコミットのみが残ります。
解決
これを解決するには複数の方法がありますが、最も一般的で、おそらくより複雑な状況に最も適していると思われる方法のみを説明します。
全履歴を書き換えて AAA サブレポを作成する方法
- レポをローカルにクローンし、クローンでのみ動作します
- ファイルを手動でAAAとBBBに分割した最後のコミットを削除します。
AAAの一部であってはならないすべてのファイルを削除する (シェル) スクリプトを作成します。たとえば、次を使用します。
git rm --cached --ignore-unmatch "${fileName}"
このスクリプトを使用して、履歴内のすべてのコマンドを次のように書き換えます。
git filter-branch --prune-empty --index-filter "myCleanupScript.sh" HEAD
(注: この最後のステップには時間がかかる可能性があります!)