74

最近,我被添加为 Github 项目的成员/贡献者。我已经在本地机器上克隆了那个项目。

我做了一些更改并在本地提交,现在尝试将更改推送到原始仓库,但是当我尝试推送时,我得到了一些权限错误?

C:\Users\MM\Documents\GitHub\software-licensing-php [master]> git push
origin master
remote: Permission to EasySoftwareLicensing/software-licensing-php.git denied to
 irfandayan.
fatal: unable to access 'https://github.com/EasySoftwareLicensing/software-licen
sing-php.git/': The requested URL returned error: 403
C:\Users\MM\Documents\GitHub\software-licensing-php [master]> git statu
s
# On branch master
# Your branch is ahead of 'origin/master' by 2 commits.
#   (use "git push" to publish your local commits)
#
nothing to commit, working directory clean

我是否缺乏一些推动更改的权限,所以我可以询问项目的原作者?

4

8 回答 8

156
  • 单击原始 github 项目页面上的 fork 按钮
  • 克隆您的分叉存储库而不是原始存储库
  • 推动它
  • 按存储库上的 Pull Requests 按钮
  • 创造它
  • 等待原作者采纳
于 2013-07-25T12:00:24.210 回答
72

当我通过git config --global user.email更改我的用户电子邮件 并在这里​​找到我的解决方案时,我曾经遇到过同样的错误: 转到:控制面板 -> 用户帐户 -> 管理您的凭据 -> Windows 凭据

通用凭据下有一些与 Github 相关的凭据,单击它们并单击“删除”。

当您尝试推送某些内容时,您需要再次登录。希望这对你有帮助

于 2017-04-28T05:40:42.140 回答
30

In 可以通过在下面的 url 中提供用户名和密码来解决此问题。

请将用户名和密码替换为您的 Github 凭据:

git remote set-url origin https://<username>:<password>@github.com/<username>/FirstRepository.git
于 2017-04-28T13:33:30.760 回答
10

由于某种原因,我的推送和拉取源已更改为HTTPS-url而不是SSH-url(可能是我的复制粘贴错误),但尝试推送会在尝试登录后给我以下错误:

Username for 'https://github.com': xxx
Password for 'https://xxx@github.com': 
remote: Invalid username or password.

使用 SSH url 更新远程源,解决了问题:

git remote set-url origin git@github.com:<username>/<repo>.git

希望这可以帮助!

于 2015-08-05T00:40:47.873 回答
6

请参阅克隆 URL 的 github 帮助。使用 HTTPS,如果您无权推送,则基本上您将拥有只读访问权限。所以是的,你需要让作者给你许可。

如果作者没有给你许可,你可以随时 fork(克隆)他的存储库并自己工作。一旦你做了一个很好的测试功能,你就可以向原作者发送一个拉取请求。

于 2013-07-25T12:00:25.943 回答
2

我也遇到了这个问题,但设法解决了,错误是你的电脑已经保存了一个 git 用户名和密码,所以如果你转移到另一个帐户,就会出现错误 403。以下是 Windows 的解决方案,您可以在此处找到密钥:

控制面板 > 用户帐户 > 凭据管理器 > Windows 凭据 > 通用凭据

接下来删除 Github 密钥。

于 2020-10-04T07:17:25.347 回答
2

出现此错误的另一种方法是,如果您有重复或冲突的~/.ssh/*条目。首先检查你的 ssh 钥匙链上有什么:

$ ssh-add -l
2048 SHA256:<hash1> email2@gmail.com (RSA)
2048 SHA256:<hash2> email1@gmail.com (RSA)
2048 SHA256:<hash3> email1@gmail.com (RSA)

如您所见,有两封相同的电子邮件,很容易让您感到困惑。然后检查你的config文件:

$ cat ~/.ssh/config

# GitHub: email1@gmail.com
Host github_ex
 HostName github.com
 PreferredAuthentications publickey
 IdentityFile ~/.ssh/github_ex

# GitHub: email2@gmail.com
Host github
 HostName github.com
 PreferredAuthentications publickey
 IdentityFile ~/.ssh/github

# Bitbucket: email1@gmail.com
Host bitbucket
 HostName bitbucket.org
 PreferredAuthentications publickey
 IdentityFile ~/.ssh/bitbuc

在这里,您看到您有两个不同的 github 电子邮件帐户,但相同HostName。肯定有人会感到困惑,包括你的 git。

要解决此问题,请手动删除(复制后)(默认)文件:

cd ~/.ssh
rm id_rsa
rm id_rsa.pub

现在复制回您要使用的那个,例如Host github

cp -a github id_rsa
cp -a github.pub id_rsa.pub

然后再试一次。

出于某种原因,删除密钥ssh-add -d id_rsa并没有按预期工作,因为似乎密钥链被缓存了。

于 2017-05-19T12:00:35.700 回答
1

根据原发帖者目前提供的信息,EasySoftwareLicensing/software-licensing-php的项目所有者可能只接受来自 fork 的拉取请求,因此您可能需要分叉主 repo 并推送到你的叉子,然后从它向主仓库发出拉取请求。

有关说明,请参阅以下GitHub 帮助文章

  1. 分叉一个回购
  2. 合作
于 2013-07-25T12:00:52.740 回答