我知道分叉是在服务器端克隆存储库。但我不明白为什么我要这么做。
为什么不将原始存储库克隆到我的机器,添加我的代码,而不是将新分支推送到 GitHub 并发出拉取请求?
我知道分叉是在服务器端克隆存储库[...]
差不多是这样。在 GitHub 上,分叉是其他 GitHub 存储库的副本,并引用从中复制的存储库。
备注: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
这就是叉子发挥作用的地方。通过分叉别人的存储库,您将获得您具有写入权限的副本,即您可以将您的贡献推送到其中。整个工作流程是这样的:
来自 Github 文档
分叉是存储库的副本。分叉存储库允许您自由地尝试更改,而不影响原始项目。
最常见的是,分叉用于建议对其他人的项目进行更改,或使用他人的项目作为你自己想法的起点。
Forking 通过将您的存储库标记为“从...分叉”,清楚地表明您的存储库源自另一个存储库,更重要的是,它将在原始项目的分叉列表中列出您的存储库。
这样做的优点之一是,如果原始项目在您仍在处理时终止,人们仍然可以通过主存储库的分叉列表找到您的存储库。
从 github 的角度来看,他们可以通过知道你和原始存储库之间的 git 对象是相同的并且可以共享来节省一些磁盘空间
此外,我认为您不能从不是原始存储库的分支的存储库发出拉取请求。至少我做不到,我必须分叉,推送到分叉,请求拉取请求。
另一个角度 - 为什么在一家你甚至可能拥有推送权限的公司内进行分叉。
我也更喜欢我公司内部的分叉工作流程。这使上游存储库保持干净状态。它只有官方分支和标签,并且不会被 100+ 或 1000+ 的开发分支等弄乱。当你获取上游时,你可以清楚地看到发生了什么,就像没有分叉一样,当获取时你会得到太多的变化,以至于太混乱了。 有些团队将他们的存储库视为外部开源存储库 - 即他们不允许将任何内容推送到他们的存储库 - 只允许来自分叉的拉取请求。
后续问题
“让我为您定义问题范围。
我是一名领导者,领导着一个想要为开源项目做出贡献的团队,但我们不拥有原始存储库。作为领导者,我必须先创建一个分叉。现在,有两个选择:
1.将其他团队成员添加到分叉中。 2.要求其他团队成员从我的分叉中自己创建分叉。”
请提供优点和缺点,以及您对这两个选项的担忧,以及这两个选项的适合用例(如果有)。