致命:./ config

时间:2019-07-11 13:20:13

标签: 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.

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吗?

如果有人可以为我解决一些问题,我将非常高兴。我已经搜寻了大约一天,虽然碎片慢慢聚集在一起,但我无法解决该特定问题。谢谢! :)

更新19.7.19

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

我的服务器git版本是2.19.1,似乎比解释updateInstead-参数所需的2.4.0版本要高。因此,为什么出现此错误仍然是我一个谜。

我现在正在尝试在服务器上安装新的git版本,以查看是否有任何更改。但是,我在那里遇到了另一个问题。请访问this thread

6 个答案:

答案 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页面:

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

答案 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个小时-

  1. 首先使用git命令使用ssh在远程检查GIT版本 --version在我的例子中是2.19.1,这是导致此问题的根本原因。

  2. 我建议先盯着下面的内容在cPanel上创建一个新的仓库 流程中,一旦您创建了新的回购协议,请检查以下内容。...

  3. 现在确保在远程配置上denyCurrentBranch = updateInstead 以下是我的远程配置屏幕截图,您可以检查远程配置     在远程仓库中时使用命令git config --edit     目录我的实时git配置屏幕截图

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

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

致谢!

答案 5 :(得分:0)

我也遇到了同样的问题。当我运行命令git --version时,它显示2.24.1,但是它不接受上述问题中提到的updateInstead

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

  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

希望这可以解决问题。