Git检测到大文件

3
我使用 JMeter 进行了一些负载测试,然后试图将我的项目提交到 git 中。
通过这样做:
git add .
git commit -m "message"
git push

我收到了一个错误信息

Counting objects: 13, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (13/13), done.
Writing objects: 100% (13/13), 50.13 MiB | 13.42 MiB/s, done.
Total 13 (delta 8), reused 0 (delta 0)
remote: error: GH001: Large files detected.
remote: error: File java_pid32554.hprof is 412.89 MB; this exceeds GitHub Enterprise's file size limit of 100.00 MB
To https://github.dev.myc.com/p/p.git
 ! [remote rejected] feature/branch -> feature/branch (pre-receive hook declined)
error: failed to push some refs to 'https://github.dev.myc.com/p/p.git'

为了解决错误,我采取了以下措施。
git rm java_pid32554.hprof
rm java_pid32554.hprof
added */*.hprof to .gitignore

现在我可以看到有问题的文件已经从本地文件系统中删除。为了确认,我还进行了搜索。

MacBook-Pro:p (feature/branch>)$ sudo find / -name java_pid32554.hprof
Password:
find: /dev/fd/3: Not a directory
find: /dev/fd/4: Not a directory
MacBook-Pro:p (feature/branch>)$

因此,该文件确实已经被删除了。

现在,当我尝试

git push

它仍然会出现相同的错误信息...尽管文件已经被删除了。

我不会将这个问题标记为此问题的重复。

我的问题提供了来自Git的直接错误信息,下面的答案更加清晰和直接。其他线程中有各种不同类型的解决方案。


3个回答

3
这种最初的方法假定您不关心“跟踪”大文件,因此也不需要在GitHub上保留其副本。在这种情况下,您需要“回到过去”,到早期提交版本,到添加大型不良文件之前的版本。
您可以按如下步骤操作:
git tag too_big            # a "savepoint" just in case you care for it later
git log                    # find an earlier COMMIT_ID
git reset --hard COMMIT_ID # replace COMMIT_ID with the one found

# See how things are at this point
git status

如果在“git status”后它仍未干净,也许您会对以下内容感兴趣:
# Optionally, this will wipe things out
git clean -df

从那一点继续你的工作。
git push master     # assuming your branch is master

这个标记将为您提供一个参考点,如果您需要恢复该巨大文件。但当你尝试推送到GitHub时,它也会引起问题,因此只推送 master ,而不是通用目的(模糊) git push (可能意味着 --all )。
或者,如果您必须出于某种原因对非常大的文件应用“源代码控制”,可以使用GitHub的LFS(大型文件存储)git扩展。 https://git-lfs.github.com/ 处理大型文件可能明智的做法是拥有一个git子仓库(官方称为submodule)。 https://git-scm.com/book/en/v2/Git-Tools-Submodules

3

我遇到了这个问题,但不想回退到早期版本。我选择的方法是将存储库复制到其他位置,再次克隆它,然后用原始文件覆盖文件(除了大文件)。


2
太棒了。其他的“解决方案”都太复杂和令人困惑了。我的问题是最早的版本就是第一个版本。而且我也不想失去其他的更改。谢谢。 - killjoy

2
这是因为您本地的git存储了大文件的历史记录。在git中,历史记录包含完整的文件,即使在最新版本中已被删除,这是为了让您可以撤消更改。要解决这个问题,您需要重写历史记录或将git回滚到早期版本。
相关链接请参考:如何将Git存储库还原到以前的提交?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接