不需要fork就能发起Pull Request吗?

171
以下是关于如何在GitHub上贡献代码的步骤:

以下是从主题“如何在GitHub上对别人的代码进行贡献?"中提取的步骤:

  1. 复制项目
  2. 向存储库提交一个或多个经过良好注释和清理的修改。如果您要修改多个部分或功能,则可以在此处创建新分支。
  3. 在github的Web界面上执行拉请求。

是否可能在不复制repo的情况下发起pull request?

看到在我帐户中有超过20个repo被fork,这些repo只是为了一些拉请求而存在,它们没有任何活动,零星/粉丝。看起来像我只是为了某一天抄袭别人的代码。


你为什么想要这样做? - user554546
4
好问题。同时,如何使这20个存储库更新到原始版本或删除它们也不清楚。 - Corey Alix
你实际上并没有复制任何代码。如果原始仓库发生了什么事情,你的“分支”就没有任何备份价值。 - HappyFace
为什么你想这样做呢?比如说你有一个不是作为 fork 创建的 repo 的副本。它们有共同的历史,但目前你无法创建 PR。 - oromoiluig
7个回答

176
使用创建分支权限,您可以创建一个PR而无需进行分叉。如果您不这样做,就没有办法创建一个不需要分叉的拉取请求。

20
如果您有访问该代码库分支的权限,您可以如何创建一个拉取请求?请说明。 - bolinfest
23
GitHub有一份很好的指南,关于如何创建Pull Request:https://help.github.com/articles/creating-a-pull-request/ - Ryan Bigg
9
提醒一下,可能并不是每个人都很清楚。你需要为每个你想做贡献的仓库创建一个分支...但是在你的分支中创建分支可以让你能够同时处理上游 repo 上的多个 PR。你不需要从同一个仓库创建20个分支来提交20个 PR。 - JulioHM
1
如果您没有创建分支的权限,如何检查我是否可以在存储库上创建分支? - vikramvi
1
只是回答@JasonKelley在这里的问题:如果您有权限在存储库上创建分支,请创建一个新分支,进行更改,转到PR页面,点击按钮以创建新PR,并从新分支向旧分支发起PR。旧分支将位于左侧。 - Mixchange
显示剩余2条评论

32

3
FYI,Github 最近新增了一个按钮用于合并拉取请求后删除相应的分支,便于操作(且直观):https://github.com/blog/1335-tidying-up-after-pull-requests。 - David M
@DavidM 他们应该增加一个自动删除派生仓库的功能。 - fuz

16

按照定义,除非您对目标存储库具有提交访问权限,否则拉取请求都涉及分叉。 不过,您可以采取以下几种方法:

  1. 如果您确实具有提交访问权限,请创建一个分支,并针对新分支发出拉取请求。
  2. 在问题正文中发布补丁。 这不是 GitHub 的方式,但肯定有效。
  3. 分叉存储库,创建拉取请求,然后在合并或拒绝拉取请求后删除该分叉。

如果您只是想避免保留您没有积极使用的存储库,我个人建议选择选项#3。 它遵循了 GitHub 工作流程的规范,而不会混乱您的仪表板。


可能最好放在这里:4. 维护第二个Github账户,只是为了处理这些拉取请求并忘记的情况。 如果该帐户有20个不活跃的存储库,也没有关系,因为它不是主要帐户。 - tanius
1
如果您有提交访问权限,请创建一个分支并将拉取请求针对新分支进行。好的,很好。怎么做?我的天啊,这就像拔牙一样难以得到这个问题的答案。 - Jason Kelley

7

GitHub支持共享仓库模型

共享仓库模型在小团队和私有项目中更为常见。每个人都被授予对单个共享仓库的推送访问权限,并使用主题分支来隔离更改。

在Fork & Pull模型中,拉取请求非常有用,因为它们提供了一种通知项目维护者你在分支上进行的更改的方法。但是,在共享仓库模型中,它们也非常有用,因为它们用于启动代码评审和关于一组更改的一般讨论,然后再将其合并到主干分支中。


10
请注意,这并没有解释如何在这个模型中创建拉取请求。 - bolinfest

1
你仍然需要这个一行代码: hub fork;git push -u $GIT_USER HEAD;hub pull-request

它与编程有关。

0

这很令人困惑。你可以创建拉取请求,但你却要先 fork 别人的项目,然后上传你自己的项目,在你的 fork 中进行更改。选择选项来比较分支。这是其中一种方法。你应该 fork 别人的项目,并使用最新的 git gui 克隆它(输入 url 和文件夹名称,安装路径将存储你的 forks,黏贴时默认设置应该是最优的)。或者使用 soulseek(类似服务器),torrents 或 chomikuj(虽然你需要使用 dziellacz 将开源文件拆分为 1MB 来合并)。


0

作为一种解决方法,您可以仅为 fork 存储库创建组织。


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