如何从历史记录中删除所有> 1 Mb的文件(但将它们保留在存储库中)[重复]

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

我有一个包含许多大文件(psd、exe、pdf 等)的存储库,每次我提交这些文件的更新时,git .pack 文件都会急剧增长以保留历史记录。如何从历史记录中删除所有大于 1mb 的文件,但将它们保留在存储库中。

还可以设置特定文件从不存储在历史记录中吗?

git github git-commit git-filter-branch git-rewrite-history
1个回答
4
投票

使用 git-filter-repo

git filter-repo 是 git 项目推荐的,而不是

git filter-branch

git filter-repo --strip-blobs-bigger-than 1M

使用 BFG Repo-Cleaner

较旧的 BFG Repo-Cleaner 曾经是最流行的工具。

要删除所有大小 > 1 MB 的文件:

$ bfg --strip-blobs-bigger-than 1M  my-repo.git

默认情况下,它不会触及您当前的文件。

不要使用 git 过滤分支

git filter-branch 有大量的陷阱,可能会对预期的历史重写产生不明显的损坏(并且可能会让您几乎没有时间来调查此类问题,因为它的性能如此糟糕)。这些安全和性能问题无法向后兼容地修复,因此不建议使用它。 来源

第二个问题:如何让特定文件不被存储在历史记录中

您可以将文件添加到

.gitignore
,这样它们就永远不会添加到第一个位置,但是 Git 无法配置为自动删除它们,因此您需要某种自动执行
bfg
git-filter-repo
的钩子。

最好从一开始就预防问题发生

bfg
这样的工具适用于罕见的例外情况。理想情况下,您应该首先防止大型二进制文件包含在存储库中。相反,还有许多其他方法可以保留它们,例如将它们添加到 GitHub 版本或根据您的环境将它们上传到包存储库,例如 npm、Maven 存储库或 GitHub 包

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