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 中定期提交即可。
当您需要更新子模块回购中的 大文件集 时,您必须修改那里唯一的提交,而不是创建新的提交。
我正在为一个项目使用 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 中定期提交即可。
当您需要更新子模块回购中的 大文件集 时,您必须修改那里唯一的提交,而不是创建新的提交。