git推送到远程存储库"无法从远程存储库读取"

use*_*755 31 git ssh repository git-remote

我搜索了一会儿,但我无法找到解决问题的方法.

我有一个服务器,我可以通过ssh连接到用户名git和本地git存储库.
现在我想将本地存储库推送到服务器上新创建的存储库.

这是我做的:

  • 在中创建了一个git存储库 /home/git/test.git
  • 将存储库初始化为裸机
  • 在本地计算机上添加了远程存储库
    git remote add test ssh://git@serverIp:/home/git/test.git
  • 现在我执行了push命令:
    git push test master

我总是得到

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)

我正在使用本地Windows 7机器,并希望上传到Linux服务器.
我可以通过ssh与git用户登录.我也尝试以root相同的结果作为用户(使事情工作一次).
我永远不会被问到ssh password.

我真的不知道我做错了什么.
在你称之为副本之前,我搜索了很多这个问题,似乎没有人谈论同样的问题.

更新:

  • "哪个git"返回/ usr/bin/git
  • PATH echo包含/ usr/bin
  • id_rsa和id_rsa.pub文件都已设置并带有passphrase
  • ssh git @ serverIp git-receive-pack也能正常工作并返回/ usr/bin/git-receive-pack
  • ssh git @ serverIp ls /home/git/test.git有效
  • 所有相关目录都是chmod 755
  • git是存储库的所有者
  • auth.log文件在尝试的push命令中没有新条目
  • GIT_TRACE = 2 git push test master返回:

    'C:\ Program Files(x86)\ PuTTY\plink.exe''-batch''git @ serverIp''git-receive-pack'\''/ home/git/test.git'\'''致命:无法从远程存储库读取.请确保您具有正确的访问权限并且存储库存在.

Von*_*onC 17

在这种情况下,使用openssh over putty是关键.


原始答案(调试提示)

我可以通过ssh与git用户登录.

这意味着这有效:

ssh git@serverIp
Run Code Online (Sandbox Code Playgroud)

你确实有一个HOME变量,并且有ssh公钥/私钥(id_rsa/ id_rsa.pub)%HOME%/.ssh/.

这个问题暗示了一个不同的网址:

git remote set-url test git@serverIp:/home/git/test.git
Run Code Online (Sandbox Code Playgroud)

确保你确实创建了git repo作为git(而不是root用户,当你创建git帐户时,就像在这个问题中一样).
ssh git@serverIp "which git"应该返回git可执行文件的路径.

还要检查所有父目录是否x为运行的用户git或组设置了相关(执行)位. 此外,获取git命令的更多信息可以通过以下方式完成:gitgroupls -ld /home /home/git /home/git/test.git

  • git push --verbose
    要么:
  • GIT_TRACE=2 git push test master

如果你有一个带有密码的私有ssh密钥,最好首先使用没有密码保护的私有ssh密钥测试这些ssh命令,看看问题是否仍然存在.
或者,您可以保留受密码保护的ssh密钥,但请仔细检查您的.bashrc答案.


对于任何ssh连接问题(需要git的密码),请检查:


在你的情况下,因为它与ssh git@serverIp(交互式安全shell)一起使用,但不与git(打开一个非交互式安全shell)一起工作,看看这个引用这个的线程:

使用命令行启动ssh时,将启动非交互式非登录shell.
但是...... 在这种情况下bash不使用$BASH_ENV,因此将其设置~/.ssh/environment(例如/etc/profile)也无济于事.
bash的作用是来源/etc/bashrc~/.bashrc.

确保/etc/profile确实定义了路径git,因为这里可以使用非登录帐户(这似乎是这里的情况,因为ssh git@serverIp "which git"工作,也ssh git@serverIp "git --version"应该).

还要检查权问题,并测试chmod 755/home,/home/git/home/git/test.git.

  • 事实证明`ssh://`url也是[支持](http://git-scm.com/book/ch4-1.html#The-SSH-Protocol),但它被OP指定为错误.`ssh:// git @ serverIp:/ home/git/test.git`因为额外冒号而无效.应该是`ssh:// git @ serverIp/test.git`,或者如你所说,`git @ serverIP:/ home/git/test.git`或`git @ serverIp:test.git`. (3认同)

62m*_*mkv 6

我个人有两个不同的问题:

  1. plink(在Windows上由git使用)不接受id_rsa私钥,因为它是OpenSSH 2格式=>我必须将它(使用puttygen)转换为PuTTY自己的.ppk格式并通过Git Extensions" Remotes"对话框附加

  2. 我错误地指定了git文件夹的路径,'因为我的ssh会话被chrooted(这可能是错误的单词),我指定什么是我的FTP" root"作为" /",而它是" /home/www/username/"而不是.

我理解了这一切,使用GIT TRACE=2如上所述,并通过使用procmon确定命令行plink,然后使用它,添加" -v"选项("详细").


Jua*_*ias 6

您还可以通过执行以下操作来检查SSH身份:

$ ssh-add -L
Run Code Online (Sandbox Code Playgroud)

我遇到了类似的问题.我的身份中有一个错误的钥匙,不记得原因.我只是删除了我的所有身份(也许你需要再次添加密钥):

$ ssh-add -D  
Run Code Online (Sandbox Code Playgroud)

然后我没有问题地推/拉.