【问题标题】:git push says forbiddengit push 说禁止
【发布时间】:2013-06-28 11:05:10
【问题描述】:

我通常在两个地方工作,并且是 git 新手。我第一次在线创建了一个存储库并将其添加到我的系统中,就像 github 网站告诉的步骤一样。然后我想从另一个地方在同一个存储库上工作,所以我也在我的另一个系统中安装了 git 并执行了以下操作:

创建了一个目录:

然后在那个目录中我做了 git init

之后我做了 git config --global user.name "Name"git config --global user.email "email"

然后我通过从 github 网站中的 HTTPS CLONE URL 选项 获取存储库的地址来添加之前从其他系统创建的相同存储库,如下所示:

git 添加来源https://github.com/myUserName/repoName.git

然后获取我所做的所有存储库数据:

git pull origin master

直到这一切正常,我将所有数据都放到了我的系统上,但是当我对文件进行一些更改并提交更改时,我开始使用命令推回更改:

git push origin master

但我无法推送更改,因为它说 Error: 403 Forbidden

据我说,它给了我这样一条消息,因为它没有要求我输入任何用户名和密码组合,但是当我在我的第一个系统中配置存储库时,它在推送时要求我输入用户名和密码。

在做了一些谷歌之后,我发现我们可以将用户名和密码插入到 .git/config

中的文件中

所以我编辑了该文件如下:

之前我的配置文件是这样的:

[core]

        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
[remote "recupero"]

        url = https://github.com/satyam1990/recupero.git
        fetch = +refs/heads/*:refs/remotes/recupero/*

编辑我的配置文件后的样子:

[core]

        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
[remote "recupero"]

        url = https://Username:myPasswordHere@github.com/satyam1990/recupero.git
        fetch = +refs/heads/*:refs/remotes/recupero/*

如上编辑我的配置文件后,我可以推送,但是当我推送更改时,它会立即在我的屏幕上显示我的用户名和密码,我不希望这样。有没有一种方法可以让 git 在我每次 git push 时都向我询问用户名和密码,就像在我之前第一次配置 git 的系统上一样。而且将用户名和密码立即存储在文本文件中也不是一个好习惯。

【问题讨论】:

  • 您使用的是两台不同的计算机吗?在这种情况下,您必须将两个 ssh 密钥添加到您的 github 帐户。 github.com/settings/ssh
  • 我没有使用 ssh 协议,正如您在我的配置文件中看到的那样,我使用的是 https,是否有必要使用 ssh。
  • 据我所知 Github 只支持 ssh 写入 repos。尝试将您的远程网址更改为:ssh://git@github.com:satyam1990/recupero.git
  • @crea1 no https 也非常适合推送。请看下面我的回答。当您在防火墙后面工作时,它比 ssh 更方便,防火墙会阻止 ssh 端口进行外部 http 查询。 GitHub 支持智能 http (github.com/blog/642-smart-http-support)。请参阅stackoverflow.com/a/7073618/6309stackoverflow.com/a/7502628/6309 了解更多信息。

标签: git github


【解决方案1】:

是的,您可以将您的凭据存储在 $HOME/.netrc file 中。

machine github.com
login <login1>
password <password1>

或者您可以使用credential helper 来:

【讨论】:

  • 为什么它不像我以前的机器那样要求用户名和密码。
  • @msatyam 如果您使用“GitHub for Mac”或“GitHub for Windows”之类的包装器,它可能已经为您创建了.netrc,或者使用它自己的内部凭证助手。我想你在你的第一台机器上也使用了 https 地址作为“origin”(git remote -v)?
【解决方案2】:

一般来说,您应该使用带有密钥的 SSH,如果只是为了不让您的密码以纯文本文件形式存在的特定优势。使用 SSH 密钥,您可以在每台设备上拥有一个可区分的(本地加密的)密钥,并且永远不必复制它们。

对于 https,如果您使用最新的 git,它应该会询问您的用户名和密码。您甚至可以在 git URL 中添加您的用户名,以便 git 只要求输入密码。

但是,如果您能够使用 SSH,则应该使用它,因为它更安全,并且一旦您掌握了处理密钥的窍门,就更方便了。

【讨论】:

  • 一般可以使用ssh或者https。您现在有办法完全加密您的 https 凭证。所以它并不比 ssh 更安全。 而且您不必管理 ssh 密钥,而您已经拥有 GitHub 登录名/密码。
  • (1) 加密的.netrc 是一种特定于 git 的“hack”,在其他任何地方都无法使用。 (2) 我只有一个 github 密码,但可以拥有任意数量的密钥。 (3) 我不想将我的单一密码放在我的各种生产箱和工作站上,而没有适当的方法使其失效。密钥几乎总是比密码更安全、更易于使用(尽管有些问题可以通过发出设备专用密码来解决,例如使用 gmail)。
  • 同意。我更多地以普通用户的心态回答,但对于不同的工作场所,如果可能,那么是的,ssh 更好。所以+1。除非我无法在工作场所使用 ssh(ssh 端口被阻塞)。
  • 如果我是你,我会考虑换个工作场所 :) 另一方面,Github 也在端口 443 上使用 SSH,所以你可能仍然可以使用它,除非你的公司非常偏执并且使用对其路由器进行深度包检查,以确保 443 上的数据实际上是 https...
  • SSH 隧道?这是终止合同的正当理由。立即生效。 (至少在我通常工作的大型银行公司中)
猜你喜欢
  • 1970-01-01
  • 2015-03-19
  • 2016-04-25
  • 2011-05-17
  • 2011-05-29
  • 2018-03-04
  • 2011-05-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多