git/github: 从历史记录中(但不是从 HEAD 中)删除一些大的二进制文件

git/github: Remove from history (but not from HEAD) some large binary files

我正在为一个项目使用 git / github。它主要用于托管代码源,但也包含一些大图像。 我将不得不不时更新大图像,但我不想保留它的历史,我只想要我的 git / github 中的最新版本。

有没有办法对git说:"keep this file, but don't keep any history of it"? 如果没有,我如何在提交/推送后立即手动安全地删除我的文件历史记录?

感谢您的帮助!

我看到两个可能的解决方案。

第一个解决方案("dirty")

使用一个分支进行开发,该分支总是有最后一次提交添加 大文件
除此之外的所有提交都不应添加任何 大文件
要更改 source 文件,您需要在 large 文件之上提交,然后使用 git rebase(例如假设您正在 master 分支工作:git checkout -b src HEAD~1 && git cherry-pick master && git rebase src master && git branch -d src) 命令弹出 large commit on top of all source 提交。
要更新 large files 的集合,您需要将 large 提交为最后一个并修改它而不是创建新文件。
在这种情况下,您将无法使用仅进行快进引用更新的默认 git push 行为,并且您必须进行强制更新,例如 git push <repository> +master:master(注意 +符号).

第二种解决方案("clean")

UPD:有相似的问题和相似的答案Managing large binary files with git
我在写完答案后注意到了这一点。

大文件创建单独的存储库,并在主存储库中将其用作git submodule
要修改 source 文件,您只需在主 repo 中定期提交即可。
当您需要更新子模块回购中的 大文件集 时,您必须修改那里唯一的提交,而不是创建新的提交。