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

33

我有一套与我的公司API相关的文档,基于TripIt出色的Slate框架。根据说明,我fork了他们的repo并进行了自定义。那个fork存在这里

令人讨厌的是,当我们组织中的贡献者发起新的pull request时,在Github的“比较更改”屏幕上,“base fork”默认为TripIt的存储库,而不是我的fork。他们已经不止一次地将pull request发送到错误的位置。告诉别人“不要那样做”并不是一个特别可靠的解决方案。我如何设置默认情况下PRs的基础为我的fork?


1
需要 保留上游的链接吗(即TripIt的基本分支)?因为我理解你使用TripIt repo来记录自己公司的代码。对吗?你不是在全公司范围内贡献到上游吧?如果你只需要这个repo来记录自己公司的文档,你可以直接克隆这个repo,而不是fork它。如果你克隆它,就没有剩余的链接指向上游,所有的PR都指向你的origin。那么origin就是你的PR的默认值,正好符合你的要求。 - Mauddev
5个回答

12

GitHub会跟踪通过其界面创建的分支,并假设拉取请求是针对原始存储库的。您需要告诉GitHub,您的副本不是分支,而只是具有相同历史记录的常规存储库。不幸的是,GitHub没有提供一个好的方法来取消选择分支链接。我通常用以下方法解决:

  1. 克隆仓库,执行 git pull 命令,确保您的本地副本完全更新。

  2. 在GitHub上删除该仓库。

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

  4. 将所有内容通过 git push 推回仓库。(您可能需要切换到每个分支并推送它,还可能需要使用 git push --tags 命令。)

易错点:此方法将丢失现有的GitHub问题和拉取请求注释。如果您经常使用这些,请不要使用此方法,您应该联系GitHub客户支持寻求帮助。


3
我非常支持DIY,但是Github的支持非常好,会是我在这里的首选。 - chicks
@robrich,如果原始的Slate存储库有新版本发布,您将如何合并更改? - Tom Fox
1
@TomFox:我通常会在本地克隆中添加两个远程仓库。git add remote origin https://my.github.repo/...git add remote upstream https://their.github.repo/...。这样,当我想要从他们的系统更新时,我就可以使用 git pull upstream mastergit push origin master 将他们的更改合并到我的分支中。 - robrich

4
很遗憾,GitHub没有提供配置默认PR目标库的方法。如果您可以删除(或让所有者删除)原始仓库A,那么这将达到目的。如果不可能或不合适删除A,但是A的所有者愿意执行以下操作,则在GitHub Enterprise上fork链接会被断开:
- 将仓库A标记为私有 - 再将仓库A标记为公共
执行此操作后,最初从A fork的仓库B将默认打开PR以自身为目标,而不是A。请注意:如果A本身是从历史中更远的地方进行了fork,那么不幸的是,一旦A消失,B就开始默认打开PR以针对该仓库。唯一的解决办法是对分支树上游的所有仓库都应用以上操作。

3
你们其他的开发人员似乎已经分叉了 TripIt 的存储库,因此那是他们工作的源/父级。 实际上,如果你打开 自己的存储库,你会发现它根本没有被分叉(分叉计数为 0)。
当他们发出合并请求时,默认情况下github会将该存储库显示为源,因此拉取请求不会发送给你。
在这种情况下最简单的解决方法是要求你的开发人员分叉你的存储库并在其上工作。

1
实际上,我已经按照上面建议的方法进行了操作,所以你现在看到的是修复后的代码库。不过还是谢谢你 :) - riney

1

0

是的,这是一个糟糕的情况...

我所知道的唯一解决方案 (除了按照此处所述,删除 fork 并直接从本地克隆重新创建/推送) 是让上游所有者将原始存储库设置为 PRIVATE,然后将其返回到 PUBLIC。将其设为私有会永久性地断开与 fork 的链接。

但当然这需要上游所有者采取行动。Github 真的应该解决这个问题,但这已经是一个很长时间的问题了。


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