如何删除不再位于 HEAD 中的旧的/历史的 Git 对象?

问题描述 投票:0回答:1

我有一个 Git 存储库,其中包含二十多年来的近 30 万次提交。这个存储库是从 SVN 迁移到 Git 的结果,因此我可以自由地重写历史记录。它只有一个分支,没有标签。

很多时候,文件是在提交中添加的,然后在稍后删除,从而将我不想保留的对象留在存储库中。

如何无条件删除HEAD中不再存在的所有对象?

我尝试过的事情:

  • BFG
    git filter-branch
    似乎都没有涵盖这个用例(我不需要编写一个检索所有旧对象ID的脚本)。
  • Git 存储库正在使用 KDE 的 svn2git 进行迁移(在 CI 中反复进行,直到我对结果满意),但其规则似乎也不涵盖此用例。

我不确定 git-filter-repo 是否/如何可以做到这一点。

git git-filter-branch bfg-repo-cleaner svn2git
1个回答
0
投票

出于好奇:你为什么要这样做?无论如何,听起来你想将所有提交压缩为一个(参见,这个问题),然后运行

git gc
来清理混乱。但话又说回来,你为什么要这样做呢?使用任何 VCS(无论是 git 还是 svn)的原因是能够及时返回,以防您需要其中一个已删除的文件。因此,在我看来,摆脱所有这些历史就违背了 VCS 的目的。

© www.soinside.com 2019 - 2024. All rights reserved.