我一直在尝试将我的提交推送到git存储库,但它显示" java堆空间错误"。推送日志如下所示:
Counting objects: 108, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (93/93), done.
POST git-receive-pack (chunked)
Writing objects: 100% (108/108), 561.41 MiB | 4.91 MiB/s, done.
Total 108 (delta 51), reused 0 (delta 0)
error: unpack failed: error Java heap space
To https://repo_address
! [remote rejected] dev -> dev (n/a (unpacker error))
error: failed to push some refs to 'https://repo_address'
我在网上进行了一些研究,但是我没有使用gerrit的一些解决方案。
答案 0 :(得分:2)
这个答案是为了回答您从当前提交中删除大文件然后重新推送提交以查看是否是导致问题的大型安装的问题。
想象一下从这个目录结构开始:
.git/
libs/somefile.jar
/someotherfile.jar
src/otherstuff.java
在您目前的情况下,您在提交中有一堆文件正在尝试推送,但您意识到您实际上想要删除一些您不需要在上游添加的额外内容,但您确实需要保持本地化,但也使它们永远不会被推高。
您可以通过以下方式查看当前提交中的文件:
git log --pretty=format:"%h %s" --decorate --numstat HEAD^..HEAD
现在,我们要创建一个没有libs /文件夹的新提交对象,并在.gitignore中标记它,以便将来永远不会添加它。
# either do this recursively to the dir with this command:
git rm -r --cached libs
# or individual name the files:
git rm --cached libs/somefile.jar
git rm --cached libs/someotherfile.jar
现在您有本地更改,您可以使用git status
:
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
deleted: libs/somefile.jar
deleted: libs/someotherfile.jar
Untracked files:
(use "git add <file>..." to include in what will be committed)
libs/
如果查看文件系统,文件仍应存在。这就是--cached
所做的 - 保留了工作区文件,只从git repo中删除了它们。
现在我们编辑.gitignore文件并为/libs/
添加条目或单独命名文件,然后将其添加到您的变更集中:
git add .gitignore
最后,我们要提交所有这些更改,将旧提交替换为其中的所有大文件。
这是通过git commit --amend
完成的。所有这一切都是用新的提交替换您当前的提交,而不是在旧的提交之上添加新的提交。
它会弹出提交消息的常用对话框。您可以保持它与您喜欢的相同,或者在提交消息中添加一些其他注释。这将是新提交的提交消息,完全替换旧提交(即lib文件将从提交中消失)。
如果您执行git状态,您应该看到您仍然在origin / master之前提交1,如果您在提交本身中检查文件(使用上面的git log ...
命令),它应该& #39;包含任何不需要的文件。
现在尝试推回遥控器。
如果您在某个时间点陷入困境,请发布git status
输出。它通常会为您提供知道如何继续的所有提示。