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

时间:2013-04-20 09:36:57

标签: git ssh repository git-remote

我搜索了一段时间但我无法找到解决问题的方法。

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

这是我做的:

  • /home/git/test.git
  • 中创建了一个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.

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

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

更新:

  • “哪个git”返回/ usr / bin / git
  • PATH echo包含/ usr / bin
  • id_rsa和id_rsa.pub文件全部设置并带有密码短语
  • ssh git @ serverIp git-receive-pack也适用,并返回/ usr / bin / git-receive-pack
  • ssh git @ serverIp ls /home/git/test.git works
  • 所有相关目录均为chmod 755
  • git是存储库的所有者
  • auth.log文件在尝试的推送命令
  • 上没有新条目
  • GIT_TRACE = 2 git push test master返回:

      

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

  •   

4 个答案:

答案 0 :(得分:17)

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


原始答案(调试提示)

  

我可以通过ssh使用git用户登录。

这意味着这有效:

ssh git@serverIp

您确实在HOME中定义了id_rsa变量,以及ssh公钥/私钥(id_rsa.pub / %HOME%/.ssh/)。

This question建议使用不同的网址:

git remote set-url test git@serverIp:/home/git/test.git

确保你创建git repo为git(而不是root用户,创建git帐户时,如this question中所示)。
ssh git@serverIp "which git"应该返回git可执行文件的路径。

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

  • git push --verbose
    或者:
  • GIT_TRACE=2 git push test master

如果你有一个带密码的私有ssh密钥,最好首先使用私有ssh密钥 密码保护来测试这些ssh命令,看看问题是否仍然存在。 /> 或者,您可以保留受密码保护的ssh密钥,但double-check your .bashrc as in this answer


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


在您的情况下,由于它适用于ssh git@serverIp(交互式安全shell),但不适用于git(打开非交互式安全shell),请查看this thread,其中引用{ {3}}:

  

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

确保/etc/profile确实定义了this one,因为path for git(这似乎是ssh git@serverIp "which git"工作的情况,ssh git@serverIp "git --version"也应该。)

但请检查正确的问题,并在chmod 755/home/home/git上测试/home/git/test.git

答案 1 :(得分:6)

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

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

  2. 我错误地指定了git文件夹的路径,'因为我的ssh会话被chrooted(可能是错误的单词)而我指定了什么是我的FTP“root”为“{{1} }“,而它是”/“而不是。

  3. 我理解了所有这些,使用/home/www/username/如上所述,并使用GIT TRACE=2确定procmon的确切命令行,然后使用它,添加“{{1 “选项(”详细“)。

答案 2 :(得分:6)

您还可以执行以下操作检查您的SSH身份:

$ ssh-add -L

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

$ ssh-add -D  

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

答案 3 :(得分:0)

将GIT_SSH环境变量设置为TortoisePlink.exe的完整路径(您可能必须为此下载TortoiseGit)而不是PuTTY的plink.exe。这将允许弹出对话窗口提示事物,即确认指纹或输入密码。如果您通过Git使用plink.exe,则无法输入对plink.exe提示的响应,如果有任何提示将导致您看到的致命错误。