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

时间:2015-01-04 21:27:11

标签: git github

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

有没有办法对git说:"保留此文件,但不保留任何历史记录"? 如果没有,如何在提交/推送后立即手动安全地删除我的文件的历史记录?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

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

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

使用一个总是最后一次提交添加大文件的分支进行开发 除此之外的所有提交都不应添加任何大文件 要对文件进行更改,您需要在之前提交,然后使用git rebase(假设您是使用分支:git checkout -b src HEAD~1 && git cherry-pick master && git rebase src master && git branch -d src)命令在所有提交之上弹出提交。
要更新一组大文件,您需要将提交作为最后一个并修改它而不是创建新文件。
在这种情况下,您将无法使用默认git push行为,只会进行快速更新,并且您必须进行强制更新,例如git push <repository> +master:master(请注意 + 签署)。

第二种解决方案(&#34;清洁&#34;)

UPD:类似的问题也有类似的答案Managing large binary files with git 在我写完答案之后,我注意到了。

大文件创建单独的存储库,并在主存储库中将其用作git submodule
要修改文件,您只需在主仓库中进行常规提交即可 当你需要在子模块仓库中更新大文件的集合时,你必须修改那里的唯一提交而不是新的。