编写对象时Git挂起


100

我正在尝试git push -u origin master并且它只是挂在

Writing objects:  99% (219/220), 12.65 MiB | 97 KiB/s

12.65部分移动。当我退出该流程并再次运行时,它会以99%的速度恢复,但从未像以前一样完成。

它从来没有成功推动过。这是初始提交。


您想推到哪里?您使用的是SSH还是其他协议?
圣保罗Ebermann

25
会设置http.postbuffer帮助吗?stackoverflow.com/questions/6842687/…–
VonC

3
VonC的评论太容易忽略了。这个对我有用。
2014年

1
难以置信的。这对我也是如此。现在是2018年。它是SSH,而不是HTTP。整个仓库大约有15MB。而“远程”服务器是本地主机。伙计们,请停止浪漫化Git!;)
Sz。

Answers:


218

我遵循了VonC的建议:

git config --global http.postBuffer 524288000

基于注释,以供将来参考:

500 MB: 524288000 (as posted in the original answer)
1 GB: 1048576000
2 GB: 2097152000 (anything higher is rejected as 'out of range')

4
天哪,谢谢你!拔了我的头发,这解决了我的问题!
布雷特·托马斯

3
@HugoForte增加缓冲区似乎可以解决我挂起的文件写入问题,但是我的git push从未完成(挂起Writing objects: 100%)-以前它的挂起速度为25%,因此这显然有所帮助。但是,我仍然出现“怪异”的行为。我重新启动了系统,这似乎可以解决问题……仅供参考...如果有人在增加缓冲区后仍然遇到问题,则重新启动系统对我的情况有所帮助(不过,旧式的解决方案不过是重新启动确实有帮助)。
twknab

4
谁能解释这个数字的524288000来源?
瑞尔(Ryre)'17年

6
@Ryre 500 MB
Hugo Forte

1
上帝保佑你和Stackoverflow,如果没有,我会成为一个完全的失败者
解码器7283年

35

之所以发生这种情况,是因为repo目录中存在巨大且不可忽视的文件。哎呀

编辑

挂起是因为该文件需要很长时间才能上载。该文件不应该包含在推送中。

编辑

确实,大文件可能是导致此问题的原因,但是,如果您不能忽略有问题的文件或只是其推入,请遵循答案。


@TimoSolo我为什么要这样做?我是遇到这个问题的人,并且记录了确切的修复程序。非常简单。
mattalxndr

4
是的,您的解决方法是消除此问题。为了真正需要推大文件的其他人,@ hugo-forte的答案解决了这个问题。你不必到,我只是认为这将帮助更多的人-在SO的精神。
TimoSolo

1
问题不是“我怎么提交,然后推送一个大文件?”。这是“我的git push永无休止。为什么?” 如果您不希望这种推送会永远持续下去,那么您(像我一样)可能就不是要提交那个大文件了。
mattalxndr

3
@mattalxndr当接受的答案具有1/8票时,您可能应该更改它。
NorCalKnockOut

1
@mattalxndr都不是完美的答案。一个确定原因,另一个提供解决方案。理想的答案将查明原因,解释其产生给定结果的原因,并提供两种替代解决方案。IMO,在当前选项中,Hugo Forte的答案是优越的,因为无论您是否要推送文件,它都能解决问题。这并不是无视那些犯了同样错误的人。它可以像其他任何人一样为他们解决问题,但是如果他们不打算推送文件,则留给他们删除文件。
BZ1

7

我遇到了同样的问题(写入对象%16),然后致命。我通过保存当前更改并克隆一个新的存储库来解决此问题,然后将修改后的文件复制到其中。

例如。假设当前存储库为A,那么您需要做的是:

  1. mv A B
  2. git clone A
  3. mv B/* A/
  4. rm -rf B

然后提交并推送,一切正常。它识别出已移动的文件已被修改:)


您遇到了不同的症状。我的没有致命错误。
mattalxndr

5

就我而言,我使用的是git文件夹,该文件夹的不良权限与存储库存储在同一驱动器上,但是即使使用授权的登录用户,对于ssh来说也是如此。

然后检查您是否具有在远程回购上写的正确权限。

例:

初始化本地和远程回购

git init /tmp/src
git init --bare /tmp/dst
cd /tmp/src

将远程仓库添加到源

src > git remote add dest /tmp/dst

模拟问题

src > chmod -R 555 /tmp/dst

添加伪文件并推送

src > touch a && git add a && git commit -m 'demo'
src > git push --set-upstream dest master
src > git push
Counting objects: 3, done.
Writing objects: 99% (2/3), 202 bytes | 0 bytes/s.

Git挂

src > chmod -R 775 /tmp/dst

2
请考虑在您的答案中添加更多示例性细节,谢谢。
Mirza Sisic

1
抱歉。是不是更好 ?
Naewis

3

在我的情况下,它是文件的大小。通过添加具有所需扩展名的.gitignore文件,我可以忽略大多数不需要推送的文件。


2

就我而言,我的互联网上传速度很慢,我想推送的文件很大,诀窍是使用git LFS(大文件存储),耐心地上传大文件,您可以在此处找到git LFS教程


1

git clean -f -n解决了我的问题。有许多未跟踪的文件未检测到。但要小心,因为这会删除目录中的文件


3
具体来说,它将删除哪些文件?
Jazimov '18

1

就我而言,我试图在不遵守公司规则的情况下进行推销。后来我了解到,我们应该以“ MOBIL-XXXX”开头提交提交消息,其中XXXX是分析人员在Jira(我们用来跟踪开发过程的另一个工具)中分配给开发人员的编号。

确保检查您的公司是否有类似的约束规则。


0

我在Windows 10计算机上遇到相同的问题,该问题writing objects挂起了,但情况略有不同。

我遇到的问题只是在尝试向存储库中添加新文件时。如果我更新存储库中已经存在的文件,则一切工作都很好,并且文件大小是否很大并不重要。通常,我试图添加新脚本。

我尝试了Internet上找到的所有其他解决方案,但在我的情况下却无济于事,而我尝试的最后一件事实际上还是有效的。看来这是由于特定驱动器和文件夹的某些Windows权限而导致,即使我使用管理员帐户登录并以管理员身份运行该应用程序,该应用程序也无法写入这些特定文件夹或更新文件。所以这个命令:

attrib -r +s D:\foldername 

为我解决了这个问题。

只是将其发布在这里,也许有人遇到与我相同的问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.