我试图在GitHub上放置一个Git项目,但它的历史包含某些大文件。如果我们尝试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
&之后保持完整的几个其他提交(字面意思 n 提交次数!) commit_2
。
我已经通过从commit_1
创建重复分支来测试本地沙箱中的克隆:
git checkout -b fix_branch <commit_1_sha_id>
发现fix_branch
仍包含大型文件:.OldFiles/blah1/[file].[ext]
。
也许我们需要删除这些大文件OldFiles
&amp;它是各自的提交历史,可以成功地推动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
。
这位新手非常感谢他们的帮助! :)
答案 0 :(得分:1)
BFG确实是为这种情况设计的。我确实读过“P.S.我们的项目空间中没有安装lfs或bfg。”你的问题的一部分,但这仍然有两种可能性:
安装BFG。如果您的计算机上安装了Java,则只需要下载.jar
个文件。
使用其他机器。使用BFG是一次性操作,您不需要在普通机器上安装它,只需访问可以运行BFG一次的机器,进行过滤,并在任何地方使用生成的repo。