删除旧git提交历史记录

时间:2017-03-28 18:07:29

标签: git git-commit git-filter-branch git-rewrite-history git-lfs

我试图在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-branchgit rebase -i编辑提交来删除所有大型文件跟踪?

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

这位新手非常感谢他们的帮助! :)

1 个答案:

答案 0 :(得分:1)

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

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

  • 使用其他机器。使用BFG是一次性操作,您不需要在普通机器上安装它,只需访问可以运行BFG一次的机器,进行过滤,并在任何地方使用生成的repo。