人们为什么要在GitHub上分叉存储库?[关闭]


110

我注意到很多GitHub帐户仅具有从其他帐户派生的存储库。此外,执行此操作的人员通常不会对派生的存储库做出任何贡献。

我听说有人在收集邮票和贝壳,但是为什么有人要收集仓库呢?就我个人而言,如果我想对其进行一些更改,则只会派出一个存储库。


84
他们希望确保项目所有者删除其存储库并消失后能够有一个稳定的备份
棘手的怪胎

9
仅仅是因为这就是GitHub中请求请求的工作方式(而且人们对此有些满意,然后有时忘记了它,或者放弃了他们的项目构想而忘记摆脱了这个分支)
haylem 2013年

2
据我了解,它们仅用作注释的代码“备份”,但当他们应该进行正确的fork(用于备份)时,他们忘记了(或不知道)更新存储库不会影响“ forks”,并且“ Star”存储库知道何时进行“重新分叉”,换句话说,他们认为“ Fork”与“ Star”几乎是同一件事,并且不知道保持了过时的代码。
Guilherme Nascimento 2014年

1
因为他们听说拥有Github足以在热门创业公司被录用。
Gaius

1
这是关于无理由分叉zbowling的
blog / 2011/11/25 /

Answers:


69

在我们的工作中,我们倾向于寻找技术原因,但我认为主要的原因不是技术原因。如果您查看GitHub帮助或其他GitHub教程,创建存储库是您“使用” GitHub的主要步骤之一。

当人们学习和评估GitHub时,几乎每个教程都将告诉他们在该学习过程中分叉一个仓库。由于GitHub的主要目的是贡献力量,因此许多学习标准教程的人都没有意识到,如果您只想要只读克隆,则不必先进行分叉。


42
出于非技术原因:我多次单击“ fork”按钮,以查看是谁分叉了该回购协议,却发现我已经分叉了。哎呀!不知道其他人是否也这样做。
gdw2 2013年

53
@gdw:使您大叫:“哦,叉子!”
本杰克逊

1
我记得当我第一次学习git和Github时,我做了一些分叉,只是因为指南和教程似乎建议将它作为计算机上获得自己的代码副本方式。
rmac

我们在工作中使用GitLab,所以我很清楚clone和fork之间的区别。我也认为,如果您不想发出请求(合并到GitLab),则不需要分叉。
cst1992 '16

3
@Jesse,这很好,但是在这种情况下通常是不必要的。一家公司可能会为他们依赖的代码这么做,以确保原始代码不会突然消失。如果您只想从源代码构建,则克隆会更简单。
Karl Bielefeldt

101

正如您在问题中提到的那样,人们在要更改代码时会分叉存储库,因为您没有对原始存储库的写权限(除非存储库所有者将您添加为协作者)。

在分支的存储库中,它们具有写访问权,并且可以推送更改。他们甚至可以使用拉取请求将其贡献回原始存储库。

我认为人们分叉存储库但不更改存储库有多种原因:

  • 他们可能会派生一个看起来很酷的存储库,只需派生它(因为它很容易(只需单击一次)),然后想要进行更改(然后可能会忘记它/没有时间这样做)
  • 他们分叉存储库进行更改,然后发现不需要更改,而忘记删除自己的存储库
  • 他们可能会分叉一个存储库,因为其中一个项目依赖于另一个存储库(可能通过子模块),并且他们希望对作为依赖项的存储库进行完全控制(原始存储库的所有者可能会决定从github移至google代码等)。 )
  • 他们可能只是忘了推动提交

5
当您不使用Github时,您会沿袭传统路线,并创建项目的本地克隆副本,以便可以对其进行修改。在GitHub上派生使您可以访问许多项目首选的拉取请求。如果您在另一个项目上,最终将创建补丁并将其发送以供审核。
Rudolf Olah 2013年

设置远程跟踪分支是一个简单的一步过程。任何尝试为GitHub之外的git仓库做贡献的人都知道它可能很繁琐。另外,如果原始作者使用AFK,则可以按照开发图查找仍在积极开发的fork。希望它将避免GitHub退化为SourceForge一样的废弃项目的荒地。
Evan Plaice 2014年

如果您分叉一个项目但未进行任何更改,该怎么办。这会视为违法吗?
杰西

@Jesse GitHub上的所有公共存储库都应具有开源许可证(即其服务条款),因此完全没有问题。尤其是当您不进行任何更改时。
MarcDefiant

28

一个可能的原因:他们有依赖于那些项目的运行代码,并且它们的构建过程涉及从github提取依赖项。拥有货叉可以保护他们免受破坏。对于不标记版本的项目,这是最简单的方法。


3
他们可以修正提交编号或应用发布版本的发布版本。
罗曼·科斯

26

Github的重点是“社交编码”

就个人而言,在以下情况下,我会分叉存储库:

  • 我要改变。
  • 我认为该项目很有趣,并且将来可能希望使用它,但是没有更简单的方法将其保存在以后我正在使用的设备上。
  • 我想使用该存储库中的部分或全部代码作为我自己项目的起点。

现在,我听说有人在收集邮票和贝壳,但是为什么有人要收集仓库呢?

为什么不?

没有什么(我能想到的)会因个人乐趣而创建存储库而出错。老实说,我保留了一些在Github和其他地方看到的有趣的项目,仅仅是出于鼓舞人心的目的,部分原因是我是个极客。我知道我不必派遣项目来阅读代码,但是我实际上可能会在以后进行编辑。

现在开始分叉。


9
+1代表“为什么不?” 部分。
Llepwryd

我在“为什么不呢?”上多加了2美分 部分:我的习惯是在完成某项功能后,总是进行“ git push”操作;QED对我有令人满意的感觉(写出远程名称和分支名称时我没有得到)。因此,只要我极有可能希望对存储库进行更改,我都希望对其进行分叉,而不必稍后再更改默认的“原始”存储库。
yoniLavi 2013年

1
我认为“为什么不呢?” 部分介绍了“星”的工作原理
TWiStErRob

2
为什么不给它加一个星标以保存以备后用呢?
dude

2
当一个项目很有趣时,我会用一颗星星。我同意其余的观点。
罗曼·科斯

1

我派出了很多我可能想使用代码的仓库,或者这是我感兴趣的项目。当我想回来以后再看一下代码时,查找列在我下面的代码会更容易仓库。我不必去谷歌搜索,也不必四处寻找名字的确切含义,也可以思考“我又在哪里看到了关于foo的那个仓库?” 如果这是我的回购协议之一,那么更容易想到这些东西。


请注意,您可以通过在存储库中加注星标来获得相同的效果-无需为此付出代价。
瓦利亚诺
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.