git filter-branch保留了太多的历史记录

时间:2019-10-07 09:46:41

标签: git git-filter-branch

我正在为每个应用程序将一个很大的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的所有历史记录。

有人知道如何解决吗?

0 个答案:

没有答案