我正在为每个应用程序将一个很大的monorepo分成多个存储库。 monorepo具有这样的文件夹结构:
|- a
| |- application1
| |- application2
|- b
| |- application3
| |- application4
|- c
| |- application5
如果要迁移application1,请运行以下命令:
git filter-branch --tag-name-filter cat --subdirectory-filter "a/application1" -- --all
git reset --hard
git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d
git reflog expire --expire=now --all
git gc --aggressive --prune=now
这已经适用于多个应用程序,但是现在我遇到了一个问题:一个迁移的应用程序具有巨大的git历史,接近monorepo本身的大小。在检查历史记录时,我发现它保留了mono-repo的大部分历史记录,包括属于其他应用程序的提交。
浏览历史记录时,最新的提交看起来不错,它们都与迁移的应用程序有关。转折点似乎是一次提交,其中有问题的应用程序已从文件夹移动到另一个文件夹(因此,假定application1在git mv
的某个位置从文件夹b移至文件夹a)。此举之前的历史记录似乎包含整个monorepo的所有历史记录。
有人知道如何解决吗?