GitHub上的Fork是什么意思?

80

经过一些探索,我理解这与贡献有关。

“Fork”意味着将仓库(被复制的仓库)复制到我的Github账户中。如果我想要fork官方jQuery仓库,那么我会进入https://github.com/jquery/jquery并点击“Fork”按钮,GitHub会将该仓库(jquery)复制到我的账户(http://github.com/sanjaykhadka)。然后,该仓库的复制版本将在http://github.com/sanjaykhadka/jquery上提供给我。

现在,我可以对我的仓库进行任何更改,然后向原始仓库(jQuery的仓库)发送一个pull请求,要求jQuery团队将我的更改合并到他们的原始仓库中。

我理解得对吗?还是它意味着更多或其他什么?


7
没错,你说得完全正确! :) - Ziyaddin Sadigov
2
提交拉取请求以将我在分支上所做的更改与主存储库合并是强制性的吗?如果我不想将更改合并到主存储库中,只想将它们保留给自己使用。那么会发生什么? - VRAwesome
2
@VRAwesome 你可以自己保留更改。它将存在于你的代码库中,不会影响主要代码库。 - Sanjay
1
分叉也不是匿名的。分叉计数增加了一个,分叉者的ID也被列出。 - ShpielMeister
如果拥有原始仓库的人删除了他们的仓库,那么 fork 的仓库也会消失吗? - zipline86
1
@zipline86 不会删除分叉的存储库,分叉的存储库将创建自己的存储库副本。除非您发起拉取请求并经过所有者的审核和批准,否则您在分叉存储库上所做的更改不会反映到原始存储库中。 - Sanjay
4个回答

49

没错,你说得很对。当我教别人如何使用 GitHub 时,我通常会通过一个例子来解释概念。让我们假设老师正在班上进行一次选择题考试。他通常会复制试卷并分发(Forking)给学生,以便他们可以完成考试并标记正确答案。老师仍然保留着原始试卷的主要副本。在考试完成后,他可以收集学生的试卷,以便他可以评估它们(Pull request)。

就是这么简单。Forking 是将主要存储库的副本复制到您的帐户中,以便您可以对其进行修改的概念。然后,您可以提交 Pull request 到主要存储库,以便管理者可以查看并接受您的修改。这将确保主要存储库不受到不必要的更改。


4
但是餐叉是一种从一个地方到另一个地方搬运食物的工具?为什么不称其为“复制”或“克隆”呢? - Cornelius
1
@Cornelius 任何公共 Git 存储库都可以被 fork 或 clone。fork 创建了一个完全独立的 Git 存储库副本。与 fork 不同,Git clone 创建了一个链接副本,它将继续与目标存储库同步。更多信息请参见:https://www.theserverside.com/answer/Git-fork-vs-clone-Whats-the-difference - Matin
@Matin 或其他人有人能帮我理解为什么甚至需要从开发者的角度进行分叉,开发者仍然可以直接从主存储库创建分支并添加更改,然后仍然可以提出PR,但是为什么甚至需要“分叉”概念呢?我知道分叉和分支之间的技术概念和区别,但我无法理解为什么甚至出现了“分叉”概念,以及它从开发者的角度提供了什么额外的好处? - tempEngineer
2
@hellWarrior 我的理解是,当您在项目中使用存储库时,分叉允许您保存代码版本并在以后进行更改。如果您仅复制存储库并且它不断更新,可能会达到新版本并破坏项目中的某些内容,例如添加旧设备不支持的功能。这可能是客户的大问题。分叉允许您复制存储库而不包括其未来的更新,然后如果需要调整代码,您也可以编辑自己的分叉。编辑存储库对开发人员来说是一个很大的好处。 - Josiah

15
以下是关于 "fork a repo" 的官方解释:

"Fork" 是一个仓库的副本。通过 fork 一个仓库,你可以自由地试验更改,而不影响原始项目。

最常见的使用方式是用于向他人提出建议性的更改或者将他人的项目作为自己想法的起点。

向他人提出建议性的更改

使用 fork 向他人提出建议性的更改的一个很好的例子是 Bug 修复。而不是记录你发现的 Bug,你可以:

Fork 仓库。 进行修改。 提交 pull request 到项目的拥有者。 如果项目拥有者喜欢你的工作,他们可能会将你的修复合并到原始仓库中!

将他人的项目作为自己想法的起点

开源的核心思想是通过共享代码来制作更好、更可靠的软件。

当从某人的项目 fork 创建您的公共存储库时,请确保包括许可文件,该文件确定您希望如何与他人共享您的项目。

有关开源的更多信息,特别是如何创建和发展开源项目,我们已经创建了 Open Source Guides,这将帮助您通过推荐为开源项目创建和维护存储库的最佳实践来促进健康的开源社区。

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


3
一个Fork是将一个项目文件夹(仓库)复制到你的GitHub帐户或桌面上,如果你在桌面上使用GitHub的话。这样就可以自由地进行更改实验,而不会影响原始项目。
你可以在GitHub本身尝试这个功能,在那里他们提供了一个仓库供你练习! https://github.com/octocat/Spoon-Knife 干杯。gities..

0

我想在已接受的答案中添加一个更重要的要点。分叉存储库通常是“服务器端克隆”,通常由第三方Git服务(如Bitbucket)进行管理和托管。

link。它说:

需要注意的是,“分叉”存储库和“分叉”并不是特殊操作。“分叉”存储库是使用标准的git clone命令创建的。“分叉”存储库通常是“服务器端克隆”,通常由第三方Git服务(如Bitbucket)进行管理和托管。没有唯一的Git命令可以创建“分叉”存储库。克隆操作本质上是存储库及其历史记录的副本。


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