无法将主分支推送到Github - 'origin'似乎不是一个git仓库/权限被拒绝。

85
这个问题与我的理解rebase,分支和合并的问题有关,以及以下问题:

如果你的远程列表中有一个团队成员,你如何提交到你的github账户?

我发现其他人也遇到了同样的问题。这个问题似乎与/etc/xinet.d/有关。 问题:无法将本地分支推送到Github的主分支。
我运行了:
git push origin master

我得到
fatal: 'origin' does not appear to be a git repository
fatal: The remote end hung up unexpectedly

错误信息提示我,分支'origin'不在我的本地git存储库中。这样,Git停止连接到Github。
这很奇怪,因为我没有删除分支'origin'。
我的git树是:
  dev
* master
  ticgit
  remotes/Math/Math
  remotes/Math/master
  remotes/origin/master
  remotes/Masi/master

如何将本地分支推送到Github,同时你的本地Git中有一个团队成员的分支?


VonC的回答解决了主要问题。 我给我的ssh密钥设置了一个密码短语。
我运行:
$git push github master     

我得到
Permission denied (publickey).
fatal: The remote end hung up unexpectedly

看起来我需要以某种方式提供Git的密码词。

如何让Github要求您输入密码词而不是依赖ssh密钥?


刚刚更新了我的回答。SSH 参数并不是全部。user.name 和 github.user 也很重要。 - VonC
我又更新了我的答案,并添加了一些SSH配置检查。 - VonC
“Permission denied (publickey)” 实际上意味着您尝试使用公钥登录,但被拒绝了许可,而不是被禁止访问您的公钥。 - Xiong Chiamiov
我的问题是来自另一个系统的不同ssh密钥。我上传了另一个密钥,一切都很好。我通过使用ssh -v git@github.com的技巧发现了这个问题。 - nalply
9个回答

98
什么是
$ git config --get-regexp '^(remote|branch)\.'

在您的git存储库中执行的返回值是什么?

Origin只是一种默认命名约定,用于引用远程Git存储库。

如果它不是指向GitHub(而是指向您的团队成员存储库的路径,该路径可能不再有效或可用),只需添加另一个origin,就像这个Bloggitation entry中所示。

$ git remote add origin2 git@github.com:myLogin/myProject.git
$ git push origin2 master

我实际上会使用名称“github”而不是“origin”或“origin2”。


权限被拒绝(公钥)。
致命错误:远程终端意外挂断

检查您的Git本地仓库是否正确声明了您的GitHub身份,如GitHub帮助指南所述。(user.name和github.name -- 和github.token)

接下来,stonean博客建议(Marcio Garcia也这样建议):

$ cd ~/.ssh
$ ssh-add id_rsa

Aral Balkan 补充道:创建配置文件

解决方案是在 ~/.ssh/ 目录下创建一个配置文件,如此页面 OS X 部分底部所述

这是我根据页面上的说明添加的文件,我的推送又开始工作了:

Host github.com
User git
Port 22
Hostname github.com
IdentityFile ~/.ssh/id_rsa
TCPKeepAlive yes
IdentitiesOnly yes

您也可以发布以下操作的结果:

ssh -v git@github.com

如果 GitHub ssh 连接拒绝了您,您可以查看更多信息。

还要检查您是否正确输入了公钥(它需要以“==”结尾)。
不要粘贴您的私钥,而是粘贴您的公钥。 公钥应该长成这个样子:

ssh-rsa AAAAB3<big string here>== tek...@gmail.com 

注意:您在使用ssh密钥时是否使用了密码短语?如果没有密码短语会更容易。

还要检查推送时使用的url(应该是git@github.com/...,而不是git://github.com/...

确保您有一个SSH代理程序来使用和缓存您的密钥。

尝试这个:

 $ ssh -i path/to/public/key git@github.com

如果这样做起作用,那么说明你的ssh客户端没有将密钥发送到GitHub。

1
太遗憾了,我不能给你投票超过一次!我在两周内遇到了这个问题两次,在每次谷歌搜索后,我都找到了这篇 Stack Overflow 的帖子。谢谢! :) - Ionuț Staicu
1
我一直在苦苦挣扎 - 我已经更改了所有的git配置,但是我缺少的步骤是ssh-add - 非常感谢! - metadaddy
这只是在这个伟大答案的背景下提出的一个小建议 - 但我喜欢将“Origin”重命名为“GitHub”(或服务器名称)的部分,它真的有助于概念化您要发送的内容的位置。 - Alex C
这对我也有效。如果你按照 Github 上的说明操作,origin 不是显而易见的。 - nick
请点击以下链接http://help.github.com/win-set-up-git/,一直跟到最后 - 这个对我很有帮助。权限被拒绝(publickey)。- 表示你在本地机器上没有为你的git设置ssh密钥。ssh-keygen -t rsa -C "your_email@youremail.com" - Roger Alien

28
这是与你的远程库有关的问题。当你执行 git push origin master 命令时,origin 是远程库的名称,master 是你正在推送的分支。
当你执行以下命令时:
git remote

我敢打赌这个列表中不包括origin。要重新添加起点(remote):

git remote add origin git@github.com:your_github_username/your_github_app.git

或者,如果它存在但格式不正确:

git remote rm origin
git remote add origin git@github.com:your_github_username/your_github_app.git

10

VonC的答案最好,但对我起作用的部分非常简单,而且被淹没在许多其他可能的答案中。如果您和我一样,在运行“入门指南”教程时遇到了此问题,并且还没有设置公共/私有SSH密钥,请尝试以下操作:

如果是这样,请尝试以下操作:

  1. $>cd ~/.ssh

  2. $>ls

  3. 如果ls的输出只有”known_hosts”,请访问:http://help.github.com/mac-key-setup/ 并从“生成密钥”部分开始按照说明操作。

在执行这些指令之后,我的"git push origin master"命令可以正常工作。


我只是在寻找这个页面。非常感谢!=D - Hugo Mota
它解决了我的问题。我的操作系统是Mac OS X,我正在按照《Ruby on Rails 3教程》书中的内容进行学习,在1.3.4节卡住了,当我需要执行git push origin master时。这是我第一次设置Git和Rails。希望这能帮助其他人。 - sivabudh

4

我有同样的问题,我觉得是防火墙阻止了git协议的访问。最终,我只能使用https://来获取和推送代码。然而这样会一直提示用户输入密码...

这里分享一个对我有用的例子(为了和那些无法使用git://协议的人共享 :))

git fetch https://[user-name]@github.com/[user-name]/[project].git

如果上述方法有效,您可以将原始代码移除并替换为:
git remote rm origin  
git remote add origin https://[user-name]@github.com/[user-name]/[project].git

1
如果需要的话,您可以使用~/.netrc文件来存储密码。这个文件被curl使用,而git在进行HTTP(S)传输时也会使用它。如果您需要查找如何使用它的具体信息,请参考相关文档。 - Arrowmaster
1
@Arrowmaster:请注意,如果您使用的是Windows操作系统,则需要使用~/_netrc(下划线“_”,而不是点“.”)。 - VonC
这对我有用。谢谢。我想知道这是不是一个 bug。 - Larry Battle

1

我遇到了同样的问题,我只是将~/.ssh/id_rsa.pub的内容添加到我的GitHub帐户中。之后再尝试git push origin master,应该就可以了。


1

我认为这是git错误信息误导的另一个案例。通常情况下,当我看到这个错误时,是由于ssh问题引起的。你是否将你的公共ssh密钥添加到了你的github账户中?

编辑:此外,xinet.d论坛帖子是指运行git-daemon作为服务,以便人们可以从你的系统中拉取。但是,在推送到github时不需要运行git-daemon。


1
我已经把我的公钥添加到了Github账户中。-- 问题在我添加了远程分支到Git之后开始出现。 - Léo Léopold Hertz 준영
1
我创建了一个新的SSH密钥对。我将新密钥粘贴到Github中,并从Github中删除了旧密钥。然而问题仍然存在。 - Léo Léopold Hertz 준영

0
记住的关键是 'origin' 不是你可能需要使用的值... 当我用 repo 的名称替换 'origin' 时,它对我起作用了。

0

以上答案没有涉及到的一个可能性是,您的 shell 可能没有 ssh 访问权限。也就是说,您可能在一个网络中(一些大学网络会这样做),其中 ssh 服务被阻止。在这种情况下,您不仅无法使用 github 服务,还无法使用任何其他 ssh 服务。您可以尝试使用任何其他 ssh 服务来测试是否存在此问题。我就遇到过这种情况。


0

我曾经遇到过这个问题,尝试了很多解决方案,包括上面列出的许多方法(配置文件,SSH调试等)。最后,我通过在git push命令中加入-u开关来解决了它,这是根据Github上创建新存储库时的说明所建议的方法 - Github新存储库


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接