1

我试图将一个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-branchgit rebase -i来编辑提交来删除所有大文件痕迹?

P.S.我们的项目空间中没有安装lfsbfg

一个li'l的帮助将非常感谢这个新手! :)

+0

如果分支的布局几乎是线性的,我会回到第一个提交,删除文件,修改它,并樱桃选择这个分支上的任何东西。如果布局更复杂,那么我认为你必须使用filter-branch来纠正它。 – eftshift0

+1

这看起来像http://stackoverflow.com/questions/2100907/how-to-remove-delete-a-large-file-from-commit-history-in-git-repository和朋友的副本。 “过滤器分支”操作以何种方式失败? – larsks

+0

@Edmundo,我不确定'cherry-pick'如何帮助我们。我们已经在'commit_1'之后做了几次提交,特别是'commit_1',我们只需要放弃大文件并保持其他文件不变。 –

回答

1

BFG是真正为这种情况设计的。我确实读过“P.S.我们没有在我们的项目空间安装lfs或bfg”。你的问题的一部分,但这仍然留给你两种可能性:

  • 安装BFG。如果您的计算机上安装了Java,则只需要下载一个.jar文件。

  • 使用另一台机器。使用BFG是一次性操作,您不需要将它安装在常用机器上,只需访问可以运行BFG一次的计算机,执行过滤并随处使用所生成的回购。

+0

它的工作! :D Tnx! –

相关问题