Git 错误:RPC失败;curl 92 HTTP/2流0未完全关闭:协议错误(错误1)

Git 错误:RPC失败;curl 92 HTTP/2流0未完全关闭:协议错误(错误1),git,push,Git,Push,错误:RPC失败;curl 92 HTTP/2流0未完全关闭:协议错误(错误1) 我在写“git”时尝试了“push”。 但是,以下消息并不能解决问题 听起来您正在使用的远程服务器或某个中间包(例如代理)无法正确使用HTTP/2协议。您可以通过请求远程服务器或中间件的所有者修复其服务器来修复此问题,也可以强制使用HTTP/1.1 如果要强制使用HTTP/1.1,可以将HTTP.version配置选项设置为HTTP/1.1。也可以根据每个URL设置,如git config手册页面中的http..*

错误:RPC失败;curl 92 HTTP/2流0未完全关闭:协议错误(错误1)

我在写“git”时尝试了“push”。 但是,以下消息并不能解决问题


听起来您正在使用的远程服务器或某个中间包(例如代理)无法正确使用HTTP/2协议。您可以通过请求远程服务器或中间件的所有者修复其服务器来修复此问题,也可以强制使用HTTP/1.1


如果要强制使用HTTP/1.1,可以将
HTTP.version
配置选项设置为
HTTP/1.1
。也可以根据每个URL设置,如
git config
手册页面中的
http..*
部分所述。

您可以使用http版本1.1强制git

git config --global http.version HTTP/1.1

您可能正在推送大于后缓冲区大小的数据

您可以尝试使用
git config--global http.postBuffer 157286400


仅供参考:

对于我在nginx背后使用bitbucket的案例,答案是:

server {
    listen 443 ssl http2 default_server;
    ...
    proxy_request_buffering off;

    # These are also relevant:
    proxy_read_timeout      600;
    client_max_body_size    0;
代码11.4.1

增加git缓冲区大小对我来说很有用

git config --global http.postBuffer 524288000
工作解决方案: 首先将HTTp版本更改为1.1,然后将更改推回到HTTP2

$git config--全局http.version http/1.1 推送正常后,我再次将HTTP版本更改为2:
$git config--global http.version http/2

在我的例子中,我必须将源代码重置为ssh而不是http/https:

git remote set-url origin git@your-git.com
要检查您的来源,您可以使用:

git remote -v

对我来说,就是这样

server {
    listen 443 ssl http2 default_server;
    ...
    location / {
         ...
         proxy_request_buffering off;
         ...
    }
}

在我的情况下,我在服务器(Gitlab)上更改了密码,但没有在本地git凭据中更改密码。

对我来说,这是由于忘记了返回444在我的nginx配置中。在HTTP 2.0的简单解决方案下,连接终止导致此误导性错误消息(在以下情况下恢复为HTTP 2):


这对我没用。但将HTTP版本从2降级到1.1: $git config--全局http.version http/1.1 推送正常后,我再次将HTTP版本更改为2:
$git config--global http.version http/2在大多数情况下,增加缓冲区大小是可行的
git config http.postBuffer 524288000
它对我很有用

最后一个选项应该是使用
git config--global http.version http/1.1


在windows计算机上使用gitbash终端(如果此信息对您有任何帮助)。

在大多数情况下,
git config http.postBuffer 524288000
应该可以工作

在我的例子中,我在我的warn.lock/package-lock.json文件中推动了大量的更改(我更改了很多包,因此更新了很多行)。由于它通常不是必需的,删除它可以消除错误。 因此,如果您使用的是Javascript,您也可以尝试使用它

git push --set-upstream origin <namebranch>
git push——设置上游原点
这是最新的,应该可以解决您的问题对我来说这是有效的:

git checkout --orphan newBranch
git add -A  # Add all files and commit them
git commit -am "Clean Repo"
git branch -D master  # Deletes the master branch
git branch -m master  # Rename the current branch to master
git push -f origin master  # Force push master branch to github
感谢:


然而,我的问题稍有不同,如果您的错误与尝试推送大文件有关,则带有“packages ready package”信息的RPC::HTTP/2流未完全关闭消息

运行: git筛选器分支-f--索引筛选器'git rm--cached--ignore unmatch{your full path file name}'


试试Git大文件存储工具



如果普通文件没有“推送”错误,如果我“推送”图像文件,则会发生错误。可能是由于任何网络问题、远程服务器或中间包导致某些内容出现问题,但这肯定是与网络相关的问题。在我的情况下,远程服务器是github.com。你会认为他们有他们的东西在一起。我从不需要在另一个存储库上更改我的http。这一个一直给我“致命的:远程端意外挂断”,但在对http/2进行更改后,我的推送成功了。GitHub同时支持这两个功能,并且这两个功能应该都可以正常工作(并且每天可以为数百万人使用)。可能还有其他原因,例如非默认防病毒或防火墙、代理服务器或TLS MITM设备,所有这些都会导致Git出现问题。为什么要降级HTTP版本?最后,我们将继续讨论HTTP2。这解决了MacOSX上的问题,
git config http.postBuffer 524288000
无法解决此问题。但是@AbhishekSharma的问题是好的,为什么我们应该降级HTTP版本。这个版本命令修复了我的问题。我尝试了post缓冲区方法和其他选项,比如在git URL中添加用户名,但这对我也没有帮助;可能是OP无法控制的东西(代理、GIT服务器等)在HTTP/2中无法正常工作。在这一问题得到解决之前,降级到HTTP/1.1是一个有效的解决办法。还有一点需要注意:您可能不希望包含
--global
标志,除非您始终使用同一中央服务器。如果您使用多台服务器(例如GitHub、BitBucket、GitLab等),然后,您可能需要在repo-by-repo的基础上设置此配置。为什么建议返回http/2?在我的情况下不工作在我的情况下不工作case@MuhammadTarique同样,这在我的情况下也不起作用。请在你的回答中添加一些解释,以便其他人可以从中学习。这与后缓冲区问题无关。谢谢你的帮助有价值的参考资料,但不适合我经常遇到相同的错误。如果您没有全局设置它,您将在每个git回购中体验到这一点,并在每个回购的本地配置中体验到这一点。还要检查你是否正在将一个非常大的文件上传到repo,那么缓冲区大小的值应该根据我尝试过的全局和本地设置,但不适用于我,实际上我也没有上传那么多大的文件。我读参考书
git config http.postBuffer 524288000
git checkout --orphan newBranch
git add -A  # Add all files and commit them
git commit -am "Clean Repo"
git branch -D master  # Deletes the master branch
git branch -m master  # Rename the current branch to master
git push -f origin master  # Force push master branch to github