如何通过删除历史记录中的一些文件来减少 Git 存储库大小?

How to decrease Git repository size by removing some files in history?

假设,在 2 月 1 日,我们有 Git 个大小为 5 MB 的存储库。添加一些图像并将它们提交到 2 月 10 日后,我们收到了 15 MB 的 repo。

如何从存储库中删除此图像并将大小减小到 5 MB?

描述

下面的两条指令将遍历您存储库中的每个提交并删除您在 <file>.<extension>

中指定的文件

注意: 小心,因为这确实会更改您的存储库的历史记录!

例子

git filter-branch --tree-filter "rm -f <file>.<extension>" -- --all

git filter-branch --index-filter "git rm --cached --ignore-unmatch <file>.<extension>" -- --all

注: 两个过滤器的区别(--tree-filter--index-filter)是一切发生的地方。稍后,该指令在暂存区而不是工作目录中执行。另外,在你 运行 filter-branch, git.git 目录中留下你的树的备份。默认情况下,您不能再次 运行 filter-branch 因为它不会覆盖备份。为了绕过这个,你可以在 filter-branch 指令之后添加 -f 选项。这将覆盖备份。

参考

git-filter-branch

cd 进入您的存储库和文件目录

示例:

cd app/public/images

然后输入以下命令;

git rm -rf ./*

这将从 git 存储库中删除您目录中的文件。 将其分解,使用 git' 显然是在指示 git 做某事。 'rm'是删除文件的命令。标志“-rf”做了两件事。 'r' 是允许递归删除; 'f' 是通过覆盖最新检查来强制执行操作。

'./*'选择您输入命令时所在目录下的所有文件。

您可以在此处找到更多信息:https://git-scm.com/docs/git-rm

更容易清理 git 存储库的方法是使用 'BFG repo cleaner'

https://rtyley.github.io/bfg-repo-cleaner/

(比 git-filter-branch 更容易,而且快得多!)

但请注意,它会更改所有历史记录,修改提交的 sha1 并影响所有开发人员!