从不同组织的不同仓库发起Git拉取请求

5

我有一个可能是独特的情况:

我在GitHub上拥有两个不同组织下的代码仓库(B不是A的fork,而是克隆的),其中一个(B)我是管理员,另一个(A)我只有读取权限。

需要明确的是,我都不是这两个仓库的所有者,所以我不能删除并重新fork。

我需要从B仓库向A仓库提交一个pull request。这是否可行?如果可以,应该怎么做呢?


A和B是否在不同的服务器上,还是只是在同一GitHub服务器上由不同的所有者管理?我会通过创建自己的A分支来处理这个问题,并将A-fork + B作为同一沙盒中的两个远程分支,以将B更改推送到A-fork,然后从A-fork向A发起PR。但你说你不能fork,那为什么呢? - joanis
@joanis 我不拥有组织a或b,也不拥有repo本身。我是repo b的管理员,具有写入权限,而对于repo A,我只有只读权限。 - unixandria
但它们是否在同一台服务器上?如果不是,并且您无法从A进行分叉,我不明白您如何可能向A发起PR... PR并不是Git的正确事情,它们是服务器软件的事情,因此必须由目标服务器支持。 - joanis
@joanis 这是 GitHub。 - unixandria
如果是GitHub,只需fork A:一旦您具有对存储库的读取访问权限,您就应该能够将其fork,将更改推送到您的fork中,并在那里创建拉取请求。 您不需要成为所有者或管理员即可进行fork操作,只需要读取访问权限即可。 - joanis
@joanis 但是我需要从另一个仓库拉取请求更改。 - unixandria
2个回答

5

根据评论中的澄清,这里提供了一个完整的解决方案,应该适合您:

步骤1. 前往GitHub并fork A,创建A-fork。

步骤2. 克隆您的fork:

git clone <URL for A-fork>

步骤 3. 将 B 添加为同一沙箱的第二个远程,并检出要作为 Pull Request 提交的分支 - 我将其称为 branch-for-PR

git remote add B <URL for B>
git fetch B
git checkout branch-for-PR

第三步b。如果 branch-for-PR 已经存在于 A-fork 上,你需要从 B 合并该分支的状态:

git merge B/branch-for-PR

步骤4. 将branch-for-PR推送到A-fork,也就是在第2步克隆的origin:

git push origin branch-for-PR

第5步。前往GitHub上的A-fork并从branch-for-PR创建拉取请求。这将像往常一样通知A的管理员。

无论B托管在何处,私有Git仓库或者另一个GitHub用户下,此方法都适用。您只需要能够从同一个沙盒连接到两个仓库。


哦等一下,我分叉了,算了。 - unixandria
当你创建一个分支时,你拥有这个分支,你应该具有对它的写入权限。确保你使用正确的凭证进行推送。 - joanis
branch-for-PR 在 A 上之前存在吗? - joanis
A仅有一个主分支,而a-fork则有一个我刚创建的pull-request分支。 - unixandria
那么你需要进行合并 - 请参见我刚添加的第3步b。 - joanis
显示剩余2条评论

1

是的。只要它们共享足够的历史记录(提交),就没有问题。

  1. 进入B目录并将A添加为远程仓库 (git remote add repoA $GIT_REPO_URL)。
  2. git fetch repoA
  3. 继续与其中一个是另一个分支的方式相同的操作。

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