如何为拉取请求设置默认分叉?

How to set default fork for pull requests?

我有一套我公司API的文档,基于优秀的Slate framework from TripIt. Per instructions, I forked their repo and proceeded to customize it. That fork lives here

令人讨厌的是,当我组织中的贡献者提出新的拉取请求时,Github "Comparing Changes" 屏幕上的 "base fork" 默认为 TripIt 的存储库,而不是我的分支。他们不止一次将拉取请求发送到错误的地方。告诉人们 "don't do that" 并不是一个特别可靠的解决方案。我如何设置 PR 基于我的分支的默认值?

您的其他开发人员似乎已经分叉了 TripIt 的存储库,因此这就是他们工作的 source/parent。 事实上,如果你打开你的 own repository,你会看到它根本没有被分叉(分叉计数为 0)。

当他们发出合并请求时,默认情况下 github 将该存储库显示为源,因此不会将拉取请求发送给您。

在这种情况下,最简单的解决方法是让您的开发人员分叉您的存储库,然后对其进行处理。

GitHub 跟踪通过他们的界面进行的分叉,并假定拉取请求将针对该原始存储库。您需要告诉 GitHub 您的副本不是叉子,而是恰好具有相同历史记录的常规存储库。可悲的是,GitHub 没有提供一个好方法来取消选中 fork link。我通常这样解决:

  1. 克隆存储库,git pull,并确保您的本地副本完全是最新的。

  2. 删除 GitHub 上的存储库。

  3. 使用完全相同的名称在 GitHub 上创建存储库。确保它是一个空存储库(不要创建 READMELICENSE 文件。)

  4. git push 将所有内容放回存储库中。 (可能需要切换到各个分支推送,也可能需要git push --tags。)

FRAGILE:这种方法将丢失现有的 GitHub 问题和拉取请求评论。如果您大量使用这些,这种方法可能不是一个好主意,您应该 contact GitHub customer support 来帮助您。

很遗憾,GitHub 没有提供配置默认 PR 目标 repo 的方法。

如果您可以删除(或让所有者删除)从中分叉出 B 的原始仓库 A,那么就可以解决问题。

如果不是 possible/agreeable 删除 A,但 A 的所有者愿意执行以下操作,则分叉 link 被破坏,至少在 GitHub Enterprise :

  • 将回购 A 标记为私有
  • 再次将 repo A 标记为 Public

这样做之后,repo B(最初是从 A 分叉出来的)将默认打开针对自身的 PR,而不是针对 A。

注意:如果 A 本身是从更早的历史中分叉出来的,那么不幸的是,一旦 A 离开,B 似乎开始默认打开针对该 repo 的 PR。唯一的解决方案是将以上内容应用于分叉树上游的所有回购协议:(