首页 > 解决方案 > 如何创建到 GitHub 的拉取请求?

问题描述

我想向我只有读取权限的外国项目发送推送请求,并打开一个问题。

我遵循了几个教程,但我总是收到我没有写权限的错误消息。首先,我使用 GitHub Desktop for Windows 进行了尝试,但没有成功;现在我直接在 Linux shell 中尝试一下。

这是我所做的:

  1. git 克隆https://github.com/matthiasmullie/minify.git
  2. (然后我更改我要更改的文件)
  3. git checkout -b new_branch
  4. git 远程添加上游https://github.com/matthiasmullie/minify
  5. git config user.email "我的电子邮件地址"
  6. git config user.name "我的名字"
  7. git commit -S -m "这里我解释一下我的改变"
  8. git push -u origin new_branch
  9. (现在我输入我的 GitHub 登录凭据)

然后我收到此错误消息:

远程:对 danielmarschall 的 matthiasmullie/minify.git 权限被拒绝。致命:无法访问“https://github.com/matthiasmullie/minify.git/”:请求的 URL 返回错误:403

我究竟做错了什么?

标签: gitgithub

解决方案


我将假设存储库https://github.com/matthiasmullie/minify.git是您要向其发送拉取请求的存储库。正如您在问题中提到的,这将是upstream存储库。

您没有对upstream. 除非您是该项目的密切合作者,否则存储库的所有者不会授予您对它的写入权限。那么,我们如何解决这个问题呢?你想为回购做出贡献,但你不能推动它!

解决方案是在执行您在答案中描述的所有步骤之前创建该存储库的副本。该副本称为fork. Afork是属于您的存储库的副本。它在您的 GitHub 帐户中,因此您对该副本拥有完全的管理员权限。

因此,第一步是转到 Matthias Mullie 拥有的存储库 ( https://github.com/matthiasmullie/minify.git ) 并查找创建按钮fork(它位于屏幕的右上角一般)。单击该按钮并等待一段时间后,您将拥有一个属于您的存储库 url 或该新存储库将是https://github.com/[your-github-username]/minify仔细查看分叉的 URL,它将包含您的 GitHub 用户名,而不是 Mathias 的用户名。

现在,您按照上面提到的步骤操作,但使用您fork的遥控器:

在最后一次推送之后,您可以登录到 github.com,您应该能够从那里创建拉取请求。

请注意,我用于遥控器的名称是origin,而不是upstream。约定如下:

  • originremote 是我fork的,我有权写入的那个。
  • upstreamremote 是原始存储库,我无法推送。

正如我上面提到的,这是一个约定,因此您可以找到其他方法来定义upstreamorigin


推荐阅读