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

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

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

基本上,是的。 一个fork只是一个请求GitHub克隆项目并将其注册到您的用户名下 ; GitHub也跟踪两个仓库之间的关系,所以你可以看到两个项目(和其他叉)之间的提交和拉取。

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

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

简而言之:

叉和拉模型允许任何人分叉一个现有的存储库,并推动改变到他们的私人分支,而不需要访问授予源存储库。 然后必须由项目维护人员将这些更改拖到源代码库中。

请注意,分叉之后,可以在本地机器上克隆存储库(名称中的一个)。 进行更改并将其推送到您的分叉存储库。 但是,要反映原始存储库中的更改,必须批准您的请求请求。

其他有趣的一些其他问题 –

git叉子是否是git克隆?

我如何更新GitHub分叉库?

一个克隆是你有正确的重复和两个(可能不同)版本的仓库之间的分离。 当一个回购修改后,必须使用push命令将新内容主动复制到另一个回购。 其他回购的变化取而代之。

在服务器上分叉repo时,不需要重复内容,因为这两个repos将使用来自同一服务器的相同[固定对象]内容。 “诀窍”是pipe理不同的用户观点,以便每个用户相信他们有一个完整的回购副本。 推叉之间的叉只是更新用户的指针。

在较低的级别,git在内部执行相同的操作。 如果你有三个不同的文件,每个文件都包含Hello World ,那么git只是“分叉”Hello World blob的一个副本,并根据需要在三个地方提供。

在服务器上分叉的能力意味着Github的大容量存储容量并不是那么大,因为每个机构都共享一个基础的回购。

  • 分叉项目在您的在线存储库(回购)。
  • 克隆的项目是在你的本地机器上(我通常克隆回购后)。

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

项目经理可以接受它,让他的主要在线版本的变化。

简而言之,分叉也许就像“在你的GitHub ID / profile下克隆”一样。 叉比任何时候都好克隆,显然有一些例外。 分叉的存储库总是被监视/与原始存储库进行比较,而不像克隆的存储库。 这使您能够跟踪更改,启动拉取请求,还可以手动将原始存储库中所做的更改与分叉的同步进行同步。

如果你做了什么提问者暗示(忘了叉,只是在本地克隆回购,做了更改,现在需要发出拉请求),你可以回到正轨:

  1. 叉你想要发送拉请求的回购
  2. 将您的本地更改推送到您的远程
  3. 发出拉请求

GitHub上的另一个奇怪的差异是叉的更改不计入您的活动日志中,直到您的更改被拉入原始的回购。 更重要的是,要将分叉转换为合适的克隆,显然必须联系Github支持。

为什么我的贡献没有出现 :

提交是在一个分支

在一个分支进行的提交不会计入您的贡献。 为了让他们数,你必须执行下列之一:

打开拉取请求 ,将您的更改合并到父存储库中。 要分离fork并将其转换为GitHub上的独立存储库,请联系GitHub支持 。 如果叉子有自己的叉子,让支持知道叉子是否应该与您的存储库一起移动到一个新的networking或留在当前的networking。 有关更多信息,请参阅“ 关于叉子” 。

而@ AniketThakur的答案是非常好的。 没有人回答以下问题。

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

不可以。如果您是存储库的贡献者,则可以:创build本地克隆。 做一个本地分支。 将提交添加到该分支。 将本地分支推回到github(在这个过程中创build一个远程分支)。 做一个拉请求请求分支被合并到主分支(或任何你喜欢的分支)。