我使用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.
What it looks like in the console Window
现在我想这个错误可能是由于SSH连接中的某些故障引起的。我使用PuTTY通过SSH连接到我的Web服务器。但是,我仍然是菜鸟,我不知道它是如何工作的。
因此,我尝试的是在线生成私钥,下载私钥,将其转换为PPK格式并将其放在PuTTY的身份验证选项卡中。当我通过PuTTY登录时,我必须输入密钥密码,然后它才能正确连接。
该错误仅在git bash中。那么我该如何解决呢?是否需要以某种方式告诉Git使用PuTTY作为我的SSH代理(无论如何是SSH代理?)。还是默认情况下,是从Windows 10使用OpenSSH的Git?
我也尝试使用
$ eval $(ssh-agent -s)
$ ssh-add ~/.ssh/id_rsa
但是我不完全知道它的作用。它只是启动OpenSSH-Agent吗?
如果有人可以为我解决一些问题,我将非常高兴。我已经搜寻了大约一天,虽然碎片慢慢聚集在一起,但我无法解决该特定问题。谢谢! :)
问题仍然没有完全解决。是的,在服务器端将receive.denycurrentbranch
设置为ignore
或refuse
会使错误消失。我可以推送,但是没有文件显示。显然,只有提交保存在存储库中,而不是文件本身。正如我所想,我需要一个updateInstead
选项,该选项允许存在非裸仓库(包含实际文件的仓库,而不是仅提交的仓库),以便服务器可以从仓库中获取这些文件并将其部署在我的public_html中-文件夹。
我的服务器git版本是2.19.1,似乎比解释updateInstead
-参数所需的2.4.0版本要高。因此,为什么出现此错误仍然是我一个谜。
我现在正在尝试在服务器上安装新的git版本,以查看是否有任何更改。但是,我在那里遇到了另一个问题。请访问this thread。
答案 0 :(得分:9)
我知道这是一个老问题,但是我已经解决了,并希望将解决方案发布给其他人。
问题似乎是您的托管服务提供商上有2个git安装。其中一个安装在\usr\bin
中,并且默认使用。这个可能是1.8.*
或早于2.4
的东西。另一个安装在cpanel
应用程序目录中,并在您的路径中链接。由于git不能运行完整的shell,因此将使用默认的“旧”版本,而不是在git version
会话中运行时从ssh
返回的版本。要解决此问题,请先在您的git-receive-pack
会话下查看ssh
的路径:
which git-receive-pack
比在您的本地计算机上更新您的远程配置:
git config remote.<remote-name>.receivepack <receive-pack-path>
那应该可以解决您的问题。
答案 1 :(得分:2)
对于使用Cpannel并收到此错误的任何人,您可能需要尝试以下方法:
tls:
certificates:
- certFile: /path/to/domain.cert
keyFile: /path/to/domain.key
来自Cpannel的Git页面:
答案 2 :(得分:1)
我一直在Bluehost托管上建立git存储库。 git版本是2.19.1。我已经通过cPanel创建了仓库。而且我发现“ receive.denycurrentbranch”存在相同的问题。
我已经设法通过编辑git config文件来解决此问题。现在看起来像
全局配置(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
答案 3 :(得分:0)
您看到的问题是您为receive.denycurrentbranch
选项设置了无效的配置值。在控制台窗口中,您似乎拥有一个不了解refuse
值的Git版本(或您在该值中输入了不间断的空格)。
您应该知道此值仅适用于服务器端。在客户端设置它不会有任何影响。您应通过编辑config
(或.git/config
,视情况而定)文件并删除相应的选项将其从配置中删除,这将使推送再次起作用。
答案 4 :(得分:0)
receive.denycurrentbranch忽略并不能解决问题,以后会产生更多问题,我建议您按照以下步骤操作
这肯定会解决您的问题,因为我在搜索同一问题上浪费了5个小时-
首先使用git命令使用ssh在远程检查GIT版本 --version在我的例子中是2.19.1,这是导致此问题的根本原因。
我建议先盯着下面的内容在cPanel上创建一个新的仓库 流程中,一旦您创建了新的回购协议,请检查以下内容。...
现在确保在远程配置上denyCurrentBranch = updateInstead 以下是我的远程配置屏幕截图,您可以检查远程配置 在远程仓库中时使用命令git config --edit 目录我的实时git配置屏幕截图
现在在本地克隆cpanel存储库,并检查本地git 配置文件,并确保它具有标签[remote“ origin”],如果 你找不到它在本地git remote add上使用此命令 来源ssh:// username @ website / home / username / reponame
现在只需添加任何测试文件并提交更改并使用 下面的命令,您的远程仓库将获得更新100%git 推送原始主机-u --exec = / usr / local / cpanel / 3rdparty / bin / git-receive-pack
致谢!
答案 5 :(得分:0)
我也遇到了同样的问题。当我运行命令git --version
时,它显示2.24.1
,但是它不接受上述问题中提到的updateInstead
。
我这样做是为了解决这个问题:
which git
它将为您提供git的路径。
示例输出
/usr/local/cpanel/3rdparty/lib/path-bin/git
~/.bashrc
文件并将此代码添加到文件底部export PATH=/usr/local/cpanel/3rdparty/lib/path-bin:$PATH
*请注意,我没有在路径末尾加入git
。
希望这可以解决问题。