致命:./config 中“receive.denycurrentbranch”的错误配置值

gla*_*des 6 git git-config

我使用 git 将提交的更改推送到位于服务器上的存储库。现在有这个错误:

$ git push -u origin master
fatal: bad config value for 'receive.denycurrentbranch' in ./config
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
Run Code Online (Sandbox Code Playgroud)

在控制台窗口中的样子

现在我想这个错误可能是由于 SSH 连接中的一些失败造成的。我使用 PuTTY 通过 SSH 连接到我的网络服务器。但是,我仍然是一个菜鸟,我不知道这是如何工作的。

所以我所尝试的是我在线生成私钥,下载它,将其翻译成 PPK 格式并将其放入 PuTTY 的身份验证选项卡中。当我通过 PuTTY 登录时,我必须输入密钥密码,然后才能成功连接。

错误仅在 git bash 中。那么我该如何修复它呢?不知何故需要告诉 Git 使用 PuTTY 作为我的 SSH 代理(什么是 SSH 代理?)。或者 Git 默认使用 Windows 10 中的 OpenSSH?

我也尝试使用

$ eval $(ssh-agent -s)
$ ssh-add ~/.ssh/id_rsa
Run Code Online (Sandbox Code Playgroud)

但我不完全知道它的作用。它只是启动 OpenSSH-Agent 吗?

如果有人能帮我把事情弄清楚一点,我会非常高兴。我已经在谷歌上搜索了大约一天,虽然碎片慢慢地聚集在一起,但我无法解决那个特定的问题。谢谢!:)

19.7.19 更新

问题仍然没有完全解决。是的,设置receive.denycurrentbranchignorerefuse在服务器端会使错误消失。我可以推送,但是没有显示文件。显然,只有提交保存在 repo 中,而不是文件本身。正如我所想的那样,我需要updateInstead允许非裸存储库(包含实际文件的存储库,而不仅仅是提交的存储库)存在的选项,以便服务器可以从存储库中获取这些文件并将它们部署到我的 public_html 文件夹中。

我的服务器 git 版本是 2.19.1,这似乎高于解释updateInstead-Parameter所需的 2.4.0 版本。所以为什么会出现这个错误对我来说仍然是个谜。

我现在正在尝试在我的服务器上安装一个新的 git 版本,看看是否有任何改变。但是,我在那里遇到了不同的问题。请访问此线程

小智 14

我知道这是一个老问题,但我已经解决了它并想为其他人发布解决方案。

问题似乎是您的托管服务提供商上有 2 个 git 安装。一个是安装在\usr\bin默认情况下使用的。这可能是1.8.*或早于2.4。另一个安装在cpanel应用程序目录中并链接到您的路径中。因为 git 不运行完整的 shell,所以使用默认的“旧”版本,而不是git version您在sshsession 中运行时返回的版本。要解决此问题,请先查看会话git-receive-pack下的路径ssh

which git-receive-pack 
Run Code Online (Sandbox Code Playgroud)

比在您的本地机器上更新您的远程配置:

git config remote.<remote-name>.receivepack <receive-pack-path>
Run Code Online (Sandbox Code Playgroud)

那应该可以解决您的问题。


小智 7

对于使用 Cpannel 并收到此错误的任何人,您可能想尝试以下操作:

git push origin master -u --exec=/usr/local/cpanel/3rdparty/bin/git-receive-pack
Run Code Online (Sandbox Code Playgroud)

取自 Cpannel 的 Git 页面:

https://documentation.cpanel.net/display/CKB/Guide+to+Git+-+Host+Git+Repositories+on+a+cPanel+Account


bk2*_*204 0

您看到的问题是您为该receive.denycurrentbranch选项设置了无效的配置值。从控制台窗口来看,您的 Git 版本似乎无法理解该refuse值(或者您在值中键入了不间断空格之类的内容)。

你应该知道这个值只适用于服务器端。在客户端设置它没有任何效果。您应该通过编辑config(或.git/config,视情况而定)文件并删除适当的选项来将其从配置中删除,这将使推送再次工作。