我使用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
它再次提供相同的错误消息....即使文件被删除。
我不会将此问题标记为this
的副本我的问题提供了来自git的直接错误消息,下面的答案更清晰直接。另一个线程混杂着不同类型的解决方案。
答案 0 :(得分:2)
第一种方法假设您不关心“跟踪”大文件;因此无需在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扩展。
有一个git子存储库(官方称为子模块)处理大文件可能是明智的。
答案 1 :(得分:2)
这是因为您的本地git具有大文件的历史记录。在git中,历史记录包含完整文件,即使它已在最新版本中删除,这样您也可以撤消更改。要解决这个问题,您需要重写历史记录,或者将git repo恢复为早期版本。
答案 2 :(得分:0)
我遇到了这个问题,并没有想要恢复到早期版本。我选择的选项是将存储库复制到别处,再次克隆它,然后用原始文件覆盖文件(大文件除外)。