从 GitLab 存储库中永久删除二进制文件

Permanently removing binary files from GitLab repos

我们有一个 GitLab 托管的存储库在工作,其中包含一些我们想要删除的大型二进制文件。我知道 BFG Repo-Cleaner 等工具可以从 Git 存储库中删除文件。

我们经常在 GitLab 中引用特定的提交 ID。 运行 BFG Repo-Cleaner 会把这些搞砸吗?

如果是这样,是否有更好的方法来清理不会弄乱这些的存储库?

We often refer to specific commit IDs in GitLab. Would running BFG Repo-Cleaner mess these up?

A git 提交 ID 是根据提交内容的哈希值和上一次提交的 ID 构建的。这意味着 any 修改您的历史记录的操作将导致 (a) 您修改的任何提交的新提交 ID 和 (b) 每个新的提交 ID后代提交.

如果不生成新的提交 ID 序列,就无法修改存储库的历史记录。

We often refer to specific commit IDs in GitLab.

虽然 git 历史在不更改所有后续提交 ID 的情况下无法修改,但 BFG 做了一些有助于更改的事情:

  1. 在清理您的存储库时,BFG updates any object ids it finds in commit messages with their new ids. If you are deleting private data, it's a straight substitution, if you're just deleting big files (ie the commit ids themselves don't imply sensitive information), the text in your commit message becomes "$newId [formerly $oldId]" and in addition, a Former-commit-id: footer will be added to the bottom of all modified commit messages.
  2. BFG每次运行时还会在repo-name.bfg-report目录下创建一个object-id-map.old-new.txt文件。原则上,我相信这个文件可以用在 GitLab 存储库上,这样其他对提交 ID 的引用也可以被修复。

完全披露:我是 BFG Repo-Cleaner.

的作者