我正在尝试将一个 Git 项目放在 GitHub 上,但其历史记录包含某些大文件。如果我们尝试 git push
到 GitHub,我们会收到错误:
remote: error: GH001: Large files detected. You may want to try Git Large File Storage - https://git-lfs.github.com.
remote: error: File .OldFiles/blah1/[file].[ext] is 257.29 MB; this exceeds GitHub Enterprise's file size limit of 100.00 MB
我们的第一次提交(例如 commit_1
)包含一些大文件,这些文件在后续提交(例如 commit_2
)中被删除,而没有重写 git 提交历史记录。
我们正在使用AFS文件系统
(可能是额外信息),所有旧的大文件都存储在.OldFiles
目录中的特定位置。
在 commit_2
中,我们删除了 .OldFiles
及其内容,并将 blah1
目录添加到 .gitignore
中,但是这并没有删除它们在 Git 中的历史记录。
不幸的是,我们需要在 commit_1
和 commit_2
之后保持其他几个提交的完整性(实际上是 n 次提交!)。
我通过从 commit_1
创建重复分支,在本地沙箱中测试了克隆:
git checkout -b fix_branch <commit_1_sha_id>
发现fix_branch
仍然包含大文件:.OldFiles/blah1/[file].[ext]
。
也许我们需要删除 OldFiles
中的这些大文件及其各自的提交历史记录才能成功进行 GitHub 推送。
尝试过this但我们在 git rebase 中遇到错误:
error: unrecognised input
error: could not build fake ancestor
也尝试过this但失败了:
git filter-branch --force --index-filter \ 'git rm --cached --ignore-unmatch [project]/.OldFiles/blah1/[file].[ext]' \ --prune-empty --tag-name-filter cat -- --all
我不确定我们是否可以使用 git cherry-pick因为我们不能丢弃 commit_1
中的所有文件,而只能丢弃这些大文件。
是否可以通过重写 git 历史记录并使用 git filter-branch 和 git rebase -i 编辑提交来删除所有大文件跟踪?
附注我们的项目空间中没有安装 lfs
或 bfg
。
非常感谢这位新手的帮助! :)
最佳答案
BFG确实是专门为这种情况设计的。我确实读过“P.S.我们的项目空间中没有安装 lfs 或 bfg”。你的问题的一部分,但这仍然给你留下了两种可能性:
安装 BFG。如果您的计算机上安装了 Java,则只需下载一个
.jar
文件即可。使用另一台机器。使用 BFG 是一次性操作,您无需将其安装在常用计算机上,只需访问一台可以运行 BFG 一次的计算机,进行过滤并在任何地方使用生成的存储库即可。
关于git - 删除旧 git 提交历史记录中大文件的所有痕迹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43076857/