GitHub:我为什么要分叉?

问题描述 投票:0回答:5

我知道分叉是在服务器端克隆存储库。但我不明白为什么我要这么做。

为什么不将原始存储库克隆到我的机器,添加我的代码,而不是将新分支推送到 GitHub 并发出拉取请求?

git github
5个回答
97
投票

我知道分叉是在服务器端克隆存储库[...]

差不多是这样。在 GitHub 上,分叉是其他 GitHub 存储库的副本,并引用从中复制的存储库。

enter image description here

备注:fork 的概念起源于 GitHub;它不是 Git 概念。

[...] 但我不明白为什么我要这么做。为什么不将原始存储库克隆到我的机器,添加我的代码,然后将新分支推送到 GitHub 并发出拉取请求?

除非您对相关存储库具有写权限,否则您不能简单地将任何内容推送到其中;服务器将拒绝您的推送,并显示以下形式的错误消息

remote: Permission to bos/text.git denied to Jubobs.
fatal: unable to access 'https://github.com/bos/text/': The requested URL returned error: 403

这就是叉子发挥作用的地方。通过分叉别人的存储库,您将获得您具有写入权限的副本,即您可以将您的贡献推送到其中。整个工作流程是这样的:

  1. 确定 Alice 的存储库中可以改进的区域。
  2. 分叉该存储库。
  3. 在本地计算机上克隆您的分叉。
  4. 在该克隆中进行更改、运行测试、创建提交(可能在新分支上)等。
  5. 或者,一旦您对 Alice 代码的修改感到满意,可以让您的工作更加美观:整理/压缩您的提交,编写尊重 Alice 存储库风格的良好提交消息。如果自从您分叉她的存储库后,爱丽丝已将更改推送到她的存储库,您可能还想将您的分支重新设置为爱丽丝的分支。
  6. 推到你的叉子上。
  7. 向 Alice 发出拉取请求(实质上是通知 Alice 查看您在她的存储库的分支中所做的更改)并等待她审核。
  8. 向您的分支推送更多提交(并可能重新调整基础),直到 Alice 对您的工作感到满意为止。
  9. 如果一切顺利,Alice 会合并你的 Pull 请求;你的工作会被集成到她的 GitHub 存储库中。香槟酒!你的工作没有白费。
  10. 如果您近期不打算为 Alice 的存储库做出贡献,您可以安全地删除您的分叉,以节省 GitHub 服务器上的空间。另一方面,如果您经常为 Alice 的存储库做出贡献,请保留您的分叉并经常将其与 Alice 的存储库同步。

44
投票

来自 Github 文档

分叉是存储库的副本。分叉存储库允许您自由地尝试更改,而不影响原始项目。

最常见的是,分叉用于建议对其他人的项目进行更改,或使用他人的项目作为你自己想法的起点。

https://help.github.com/articles/fork-a-repo/


7
投票

Forking 通过将您的存储库标记为“从...分叉”,清楚地表明您的存储库源自另一个存储库,更重要的是,它将在原始项目的分叉列表中列出您的存储库。

这样做的优点之一是,如果原始项目在您仍在处理时终止,人们仍然可以通过主存储库的分叉列表找到您的存储库。

从 github 的角度来看,他们可以通过知道你和原始存储库之间的 git 对象是相同的并且可以共享来节省一些磁盘空间

此外,我认为您不能从不是原始存储库的分支的存储库发出拉取请求。至少我做不到,我必须分叉,推送到分叉,请求拉取请求。


5
投票

另一个角度 - 为什么在一家你甚至可能拥有推送权限的公司内进行分叉。

我也更喜欢我公司内部的分叉工作流程。这使上游存储库保持干净状态。它只有官方分支和标签,并且不会被 100+ 或 1000+ 的开发分支等弄乱。当你获取上游时,你可以清楚地看到发生了什么,就像没有分叉一样,当获取时你会得到太多的变化,以至于太混乱了。 有些团队将他们的存储库视为外部开源存储库 - 即他们不允许将任何内容推送到他们的存储库 - 只允许来自分叉的拉取请求。


0
投票

后续问题

“让我为您定义问题范围。

我是一名领导者,领导着一个想要为开源项目做出贡献的团队,但我们不拥有原始存储库。作为领导者,我必须先创建一个分叉。现在,有两个选择:

1.将其他团队成员添加到分叉中。 2.要求其他团队成员从我的分叉中自己创建分叉。”

请提供优点和缺点,以及您对这两个选项的担忧,以及这两个选项的适合用例(如果有)。

© www.soinside.com 2019 - 2024. All rights reserved.