在GitHub上分叉和克隆有什么区别?

时间:2011-08-14 13:50:52

标签: git github

我想知道做一个项目的分叉和做clone之间的区别。

如果我分叉项目,我是否只能通过GitHub发送拉取请求?

9 个答案:

答案 0 :(得分:125)

当您说分叉存储库时,您基本上是在GitHub ID下创建存储库的副本。这里要注意的要点是,对原始存储库所做的任何更改都将反映回您的 forked 存储库(您需要获取并重新绑定)。但是,如果对 forked 存储库进行任何更改,则必须显式创建对原始存储库的pull请求。如果您的提取请求得到原始存储库的管理员的批准,那么您的更改将与现有的原始代码库一起提交/合并。在此之前,您的更改将仅反映在 forked 的副本中。

简而言之:

The Fork& Pull Model允许任何人分叉现有存储库并将更改推送到其个人分支,而无需将访问权限授予源存储库。然后,必须由项目维护者将更改提取到源存储库中。

请注意,在分叉后,您可以在您的计算机上本地克隆您的存储库(您名下的存储库)。对其进行更改并将其推送到分叉存储库。但是,为了反映您在原始存储库中的更改,您的提取请求必须得到批准。

其他一些有趣的讨论 -

Are git forks actually git clones?

How do I update a GitHub forked repository?

答案 1 :(得分:104)

基本上,是的。 fork只是请求GitHub克隆项目并在您的用户名下注册; GitHub还跟踪两个存储库之间的关系,因此您可以在两个项目(和其他分支)之间可视化提交和拉动。

即使您不使用fork,您仍然可以请求人们从克隆的存储库中提取 - 但您必须自己处理将其公开发布的问题。或者发送开发人员补丁(参见git format-patch),他们可以将这些补丁应用到他们的树上。

答案 2 :(得分:24)

  • 分叉项目在您的在线存储库(repo)上。
  • 克隆项目在您的本地计算机上(我通常在分配回购后克隆)。

您可以提交您的在线仓库(或在您的本地仓库上提交,然后推送到您的在线仓库),然后发送拉取请求。

项目经理可以接受它以在主要在线版本中进行更改。

答案 3 :(得分:14)

克隆是您在存储库中有两个(可能是不同的)版本之间进行适当复制和分离的地方。修改一个repo时,必须使用push命令将新内容主动复制到另一个repo。其他回购的变化也随之而来。

当您在服务器上分叉回购时,不需要重复内容,因为两个回购将使用来自同一服务器的相同[固定对象]内容。 “技巧”是管理不同的用户视点,以便每个用户都相信他们拥有回购的完整个人副本。在forks之间推送和提取只是更新用户的指针。

在较低级别,git在内部做同样的事情。如果你有三个不同的文件,每个文件都包含Hello World,那么git只需“分叉”它的Hello World blob的单个副本,并根据需要在三个地方的每一个中提供它。

在服务器上进行分叉的能力意味着Github的大容量存储容量平均不大,因为每个主体共享一个单独的底层回购。

答案 4 :(得分:6)

简而言之,Forking可能与"克隆在您的GitHub ID / profile"下相同。叉子在任何时候都比克隆好,但有一些例外,显然。与克隆的存储库不同,分叉存储库始终与原始存储库进行监视/比较。这使您可以跟踪更改,启动拉取请求,还可以手动将原始存储库中所做的更改与分叉更改。

答案 5 :(得分:3)

如果你做了提问者暗示的事情(忘了分叉,只是在当地克隆了一个回购,做了更改,现在需要发出拉动请求),你可以回到正轨:

  1. 将要发送拉请求的仓库分叉到
  2. 将您的本地更改推送到远程
  3. 问题请求

答案 6 :(得分:3)

GitHub的另一个奇怪的细微差别是,在您的更改被拉入原始仓库之前,您的活动日志中不会计算对叉子的更改。更重要的是,要将fork更改为适当的克隆,显然你必须联系Github支持。

来自Why are my contributions not showing up

  

提交是在一个分支

     

用叉子做的提交不会计入你的贡献。要使它们计数,您必须执行以下操作之一:

     

Open a pull request将您的更改合并到父存储库中。   要分离fork并将其转换为GitHub上的独立存储库,请联系GitHub Support。如果fork具有自己的分支,请让支持知道分支是否应随存储库移动到新网络中或保留在当前网络中。有关详细信息,请参阅“About forks。”

答案 7 :(得分:3)

虽然@ AniketThakur的答案非常好。还没有人回答以下问题。

  

如果我分叉了一个项目,我是否只能通过GitHub发送拉取请求?

没有。如果您是存储库的贡献者,您可以:进行本地克隆。建立一个本地分支。将提交添加到该分支。将本地分支推回到github(在此过程中创建远程分支)。发出请求将该分支合并到主分支(或您喜欢的任何分支)的拉取请求。

答案 8 :(得分:2)

In a nutshell, "fork" creates a copy of the project hosted on your own GitHub account.

"Clone" uses git software on your computer to download the source code and it's entire version history unto that computer

相关问题