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

时间:2016-08-10 15:20:23

标签: git github bitbucket gitlab

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

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

3 个答案:

答案 0 :(得分:1)

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

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

(比git-filter-branch更容易,速度更快!)

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

答案 1 :(得分:0)

描述

以下两条说明将遍历您的存储库中的每个提交,并删除您在<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,因为它不会覆盖备份。为了绕过这一点,您可以在-f指令后添加filter-branch选项。这将覆盖备份。

参考

git-filter-branch

答案 2 :(得分:-1)

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

示例:

cd app/public/images

然后输入以下命令;

git rm -rf ./*

这将从git存储库中删除目录中的文件。 为了打破它,用git'你显然指导git做某事。 'rm'是删除文件的命令。标志'-rf'做两件事。 'r'允许递归删除;而'f'是通过覆盖最新的检查来强制采取行动的。

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

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