从 Git 历史记录中清除文件时 git filter-branch 的替代方案?

Alternatives to git filter-branch when purging a file from Git history?

问题:

我的团队有两个回购协议:

在我们淘汰 Bitbucket 之前,我希望能够将 Bitbucket 的更改合并到 Github。这是我第一次完成此操作,所以现在较新的 repo 引用旧版本的历史记录。

在我的机器上合并成功,但我无法将其推送到 Github,因为 Github 不接受大于 100MB 的文件。有趣的是,我不需要那个有问题的大文件,事实上它在我合并Bitbucket/develop后就被删除了进入 Github/develop。它不再出现在 HEAD 中并不重要,它在历史中,所以它被推到 Github.

解决方案?

这是一个相当冒险的前景。这意味着每个在旧 Bitbucket 存储库上工作的人都需要将他们所有的工作推到 Bitbucket。然后我会进行清除。 然后一旦我完成,他们可能不得不删除他们的整个本地克隆,然后重新获取它 。如果他们在此期间做了任何工作,他们将不得不在新的历史记录之上重新应用他们的提交。

问题:

有没有我没有考虑的替代方案? 我能否以某种方式从较新的存储库的历史记录中清除有问题的文件,同时仍然保持从一个存储库轻松合并到另一个存储库的能力?

简答:否

原因是每个 Git ref 都由 SHA1 哈希值标识,该哈希值相对于(除其他外)其内容是唯一的。

要删除该文件,您需要重写 提交,这需要强制推送。