GitHub 如果你有 fork,不允许 fork 的 fork?
GitHub doesn't allow forking fork of fork if you have fork?
有 3 个回购:
- 有 OpenAI 基线回购:https://github.com/openai/baselines。
- 我有它的叉子:https://github.com/sytelus/baselines。
- 另一个用户有它的分支:https://github.com/hill-a/stable-baselines。
现在我想分叉 #3,即 https://github.com/hill-a/stable-baselines。然而,GitHub 不允许它说 "You've already forked stable-baselines"。我实际上没有稳定基线的分支,只有它的父级。所以消息是错误的。无论如何,这对我来说根本没有意义。 #3 现在已经发生了巨大的变化,并具有许多不同的功能。我想向两者发送拉取请求。但是,如果没有两个叉子,我就做不到。
有什么解决办法吗?
是not, indeed, possible to fork a fork。
如果#3 存储库发生分歧,#3 的所有者创建一个单独的(非分叉)存储库及其内容是有意义的,然后您将分叉该存储库以启用 PR。
虽然@VonC 提供了这样一个事实,即不可能有两个不同的叉子,但我想在此答案中添加两点:
首先,这似乎是 GitHub 的一个不幸的设计决定,没有技术原因不允许这样做。每个 repo 都应该能够指向它想要启用 PR 机制的任何上游。对于一个旨在促进协作开发的平台来说,这是一个令人难以置信的限制。
其次,我想提供一种方法,您可以仍然执行此操作,但您需要做一些额外的工作。假设某些用户有 repo R 和他们的两个分叉 R1 和 R2。您希望能够在 R、R1 和 R2 上工作并向它们发送您的拉取请求。完成此操作的方法如下:
- 在本地克隆 R,然后从中创建新的 github 存储库。这意味着您的回购不会显示为分叉,并且您无法将 PR 从它发送到 R。
- 使用
git remote add r1_fork https://github.com/<user1>/R1.git
. 为每个分叉添加遥控器
- 对于每个分支使用
git checkout -b r1_fork
创建自己的分支。
- 在每个分支中,从该分支中获取更改:
git fetch r1_fork
。
- 获取后在该远程分支中进行硬重置:
git reset --hard r1_fork/master
。
现在您可以在分支中为每个单独的遥控器工作并进行更改。但是,您还不能发送 PR。要发送 PR,您需要分叉该 repo,然后将分支中的更改合并到分叉,发送 PR 并删除分叉。显然,这是非常不理想的,但这是我们在 GitHub 修复他们的东西之前得到的结果。
有 3 个回购:
- 有 OpenAI 基线回购:https://github.com/openai/baselines。
- 我有它的叉子:https://github.com/sytelus/baselines。
- 另一个用户有它的分支:https://github.com/hill-a/stable-baselines。
现在我想分叉 #3,即 https://github.com/hill-a/stable-baselines。然而,GitHub 不允许它说 "You've already forked stable-baselines"。我实际上没有稳定基线的分支,只有它的父级。所以消息是错误的。无论如何,这对我来说根本没有意义。 #3 现在已经发生了巨大的变化,并具有许多不同的功能。我想向两者发送拉取请求。但是,如果没有两个叉子,我就做不到。
有什么解决办法吗?
是not, indeed, possible to fork a fork。
如果#3 存储库发生分歧,#3 的所有者创建一个单独的(非分叉)存储库及其内容是有意义的,然后您将分叉该存储库以启用 PR。
虽然@VonC 提供了这样一个事实,即不可能有两个不同的叉子,但我想在此答案中添加两点:
首先,这似乎是 GitHub 的一个不幸的设计决定,没有技术原因不允许这样做。每个 repo 都应该能够指向它想要启用 PR 机制的任何上游。对于一个旨在促进协作开发的平台来说,这是一个令人难以置信的限制。
其次,我想提供一种方法,您可以仍然执行此操作,但您需要做一些额外的工作。假设某些用户有 repo R 和他们的两个分叉 R1 和 R2。您希望能够在 R、R1 和 R2 上工作并向它们发送您的拉取请求。完成此操作的方法如下:
- 在本地克隆 R,然后从中创建新的 github 存储库。这意味着您的回购不会显示为分叉,并且您无法将 PR 从它发送到 R。
- 使用
git remote add r1_fork https://github.com/<user1>/R1.git
. 为每个分叉添加遥控器
- 对于每个分支使用
git checkout -b r1_fork
创建自己的分支。 - 在每个分支中,从该分支中获取更改:
git fetch r1_fork
。 - 获取后在该远程分支中进行硬重置:
git reset --hard r1_fork/master
。
现在您可以在分支中为每个单独的遥控器工作并进行更改。但是,您还不能发送 PR。要发送 PR,您需要分叉该 repo,然后将分支中的更改合并到分叉,发送 PR 并删除分叉。显然,这是非常不理想的,但这是我们在 GitHub 修复他们的东西之前得到的结果。