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

fatal: bad config value for 'receive.denycurrentbranch' in ./config

提问人:glades 提问时间:7/11/2019 最后编辑:Communityglades 更新时间:9/14/2020 访问量:5086

问:

我使用 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.

它在控制台窗口中的外观

现在我想这个错误可能是由于SSH连接中的一些故障造成的。我使用 PuTTY 通过 SSH 连接到我的 Web 服务器。但是,我仍然是一个菜鸟,我不知道这到底是怎么回事。

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

该错误仅在 git bash 中出现。那么我该如何解决呢?是否需要以某种方式告诉 Git 使用 PuTTY 作为我的 SSH 代理(无论如何什么是 SSH 代理?还是 Git 默认使用 Windows 10 中的 OpenSSH?

我也尝试过使用

$ eval $(ssh-agent -s)
$ ssh-add ~/.ssh/id_rsa

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

如果有人能为我澄清一些事情,我会非常高兴。我已经在谷歌上搜索了大约一天,虽然碎片慢慢组合在一起,但我无法解决那个特定问题。谢谢!:)

更新 19.7.19

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

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

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

git git-config

评论

0赞 phd 7/11/2019
Git receive.denyCurrentBranch update的可能副本相反,失败
0赞 phd 7/11/2019
stackoverflow.com/......
0赞 VonC 7/15/2019
需要明确的是,是服务器端的设置。它在您的 PC 上没有任何作用。receive.denycurrentbranch

答:

0赞 bk2204 7/11/2019 #1

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

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

评论

0赞 glades 7/11/2019
啊,我必须说这没有任何价值。我试过了,但都不起作用。或者你的意思是我必须更改服务器端的配置文件?ignore, refuse, updateInstead
0赞 bk2204 7/11/2019
您遇到的推送问题是由于客户端的值不正确;您必须编辑客户端配置文件以删除无效的设置。如果您希望设置的选项对推送产生任何影响(除了产生错误),则必须在服务器端而不是客户端设置它。
0赞 glades 7/11/2019
谢谢,但是我应该使用什么选项而不是?它一开始就设置为,但这也不起作用,所以我尝试更改它。refuseupdateInstead
1赞 glades 7/11/2019
成功了。我在服务器端设置为.因为本地和服务器端 git 的版本都低于 2.4。因此,服务器 git 无法解释上一个值。receive.denycurrentbranchignoreupdateInstead
1赞 glades 7/17/2019
仍然没有完全解决。是的,设置到服务器端或在服务器端可以修复错误。我可以推。但是,正如我所想的,我需要允许非裸存储库(包含实际文件而不仅仅是提交的存储库)存在的选项,以便系统可以从那里部署我的网站。我的服务器 git 版本是 2.19.1,它似乎高于解释 .那么还有什么可能的问题呢?receive.denycurrentbranchignorerefuseupdateInsteadupdateInstead
0赞 Priyank Vaish 8/14/2019 #2

receive.denycurrentbranch 忽略不会解决问题,以后会造成更多问题,我建议您按照以下步骤操作

这肯定会解决您的问题,因为我浪费了 5 个小时来寻找同样的问题 -

  1. 首先使用命令 git 使用 ssh 检查远程的 GIT 版本 --version 就我而言,它是 2.19.1,这是此问题的根本原因。

  2. 我建议在盯着下面之前在cPanel上创建一个新的存储库 过程,一旦创建新的存储库,请检查以下内容。

  3. 现在确保在远程配置上 denyCurrentBranch = update代替 下面是我的远程配置截图,可以查看远程配置 在远程存储库中使用命令 git config --edit 目录 My Live git config 截图

  4. 现在在本地克隆 cpanel 存储库,并检查本地 git 配置文件,并确保它具有标签 [remote “origin”],如果 在本地 git 远程添加上使用此命令找不到它 原产地 ssh://username@website/home/username/reponame

  5. 现在只需添加任何测试文件并提交更改并使用 下面的命令,你的远程存储库将得到 100% git 的更新 推送源主 -u --exec=/usr/local/cpanel/3rdparty/bin/git-receive-pack

问候!

评论

0赞 Volomike 11/25/2019
缺少屏幕截图
18赞 Aaron Dalton 3/9/2020 #3

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

问题似乎是您的托管服务提供商上有 2 个 git 安装。一个安装在默认使用中。这个可能或更早于 .另一个安装在 app 目录中,并链接在您的路径中。因为 git 不运行完整的 shell,所以使用默认的“旧”版本,而不是您在会话中运行时从中返回的版本。要解决此问题,请先查看会话下的路径:\usr\bin1.8.*2.4cpanelgit versionsshgit-receive-packssh

which git-receive-pack 

比在本地计算机上更新远程配置:

git config remote.<remote-name>.receivepack <receive-pack-path>

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

2赞 Mykhailo Fliorko 5/23/2020 #4

我一直在Bluehost托管上设置git存储库。那里的 git 版本是 2.19.1。我已经通过cPanel创建了存储库。我用'receive.denycurrentbranch'发现了同样的问题。

我已经设法通过编辑 git 配置文件来解决这个问题。它们现在看起来像

全局配置 (git config --global --edit)

[receive]
#       denyCurrentBranch = updateInstead
#       denyNonFastForwards = true

本地存储库配置 (git config --edit)

[core]
        repositoryformatversion = 0
        filemode = true
        bare = true
        logallrefupdates = true
        symlinks = false
[receive]
#       denyCurrentBranch = updateInstead
[gc]
        auto = 0
9赞 Joe 7/8/2020 #5

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

git push origin master -u --exec=/usr/local/cpanel/3rdparty/bin/git-receive-pack

摘自 Cpannel 的 Git 页面:

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

评论

0赞 Saifur Rahman Mohsin 9/2/2020
谢谢。这有助于使用 SSH 推送到 GoDaddy 共享主机存储库。
1赞 cartbeforehorse 1/6/2021
这是一个正确的答案。但@aaron道尔顿的答案更好。如果在 repo 配置中定义 receive-pack,则不必在命令行上定义每个新的 .push
2赞 AsDh 9/14/2020 #6

我也遇到了同样的问题。当我运行命令时,它会显示,但它没有接受上述问题中提到的。git --version2.24.1updateInstead

我这样做是为了解决这个问题:

  1. 运行此命令。
which git

它将为您提供 git 的路径。

示例输出

/usr/local/cpanel/3rdparty/lib/path-bin/git
  1. 转到文件并将此代码添加到文件底部~/.bashrc
export PATH=/usr/local/cpanel/3rdparty/lib/path-bin:$PATH

*请注意,我没有在路径的末尾包含。git

希望这能解决问题。