【问题标题】:Remove all traces of large files in old git commit history删除旧 git 提交历史记录中的所有大文件痕迹
【发布时间】:2017-03-28 18:07:29
【问题描述】:

我正在尝试将一个 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_1commit_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 编辑提交来删除所有大文件跟踪?

附:我们的项目空间中没有安装lfsbfg

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

【问题讨论】:

  • 如果分支的布局几乎是线性的,我会回到第一个提交,删除文件,修改它并挑选该分支顶部的任何内容。如果布局更复杂,那么我认为您将不得不使用 filter-branch 来纠正它。
  • 这看起来像是 stackoverflow.com/questions/2100907/… 和朋友的副本。 filter-branch 操作失败的原因是什么?
  • @Edmundo,我不确定cherry-pick 对我们有何帮助。我们已经在commit_1 之后进行了几次提交,特别是对于commit_1,我们只需要丢弃大文件并保持其他文件不变。
  • 这就是我的意思。如果分支比较 linear,可以这样做:git checkout commit_1; git rm whateverfile; git commit --amend --no-edit; git cherry-pick commit_1..branch-to-fix;。鉴于在 commit_2(这是第一个被挑选的修订版)上删除了文件并且您已经在修订版中完成了它,您可能会遇到树冲突(虽然不完全确定)。

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


【解决方案1】:

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

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

  • 使用另一台机器。使用 BFG 是一次性操作,您无需将其安装在您常用的机器上,只需访问一台可以运行 BFG 一次、进行过滤并在任何地方使用生成的 repo 的机器即可。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-19
    • 2020-03-20
    • 1970-01-01
    • 2017-06-16
    • 2014-11-20
    • 2015-07-24
    相关资源
    最近更新 更多