我试图将一个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 File System
(可能是一个额外的信息),所有旧的大文件都存储在.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
来编辑提交来删除所有大文件痕迹?
P.S.我们的项目空间中没有安装lfs
或bfg
。
一个li'l的帮助将非常感谢这个新手! :)
如果分支的布局几乎是线性的,我会回到第一个提交,删除文件,修改它,并樱桃选择这个分支上的任何东西。如果布局更复杂,那么我认为你必须使用filter-branch来纠正它。 – eftshift0
这看起来像http://stackoverflow.com/questions/2100907/how-to-remove-delete-a-large-file-from-commit-history-in-git-repository和朋友的副本。 “过滤器分支”操作以何种方式失败? – larsks
@Edmundo,我不确定'cherry-pick'如何帮助我们。我们已经在'commit_1'之后做了几次提交,特别是'commit_1',我们只需要放弃大文件并保持其他文件不变。 –