我想知道做一个项目的Fork和做一个克隆之间的区别。

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


当前回答

简而言之,“fork”创建了一个托管在你自己的GitHub帐户上的项目副本。

“克隆”使用git软件在您的计算机上下载源代码和它的整个版本历史到该计算机

其他回答

GitHub上另一个奇怪的微妙区别是,对fork的更改不会计算在你的活动日志中,直到你的更改被拉到原始的回购中。更重要的是,要把一个分叉变成一个合适的克隆,你必须联系Github支持,显然。

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

Commit was made in a fork Commits made in a fork will not count toward your contributions. To make them count, you must do one of the following: Open a pull request to have your changes merged into the parent repository. To detach the fork and turn it into a standalone repository on GitHub, contact GitHub Support. If the fork has forks of its own, let support know if the forks should move with your repository into a new network or remain in the current network. For more information, see "About forks."

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

Fork你想要发送拉取请求的回购 将本地更改推到遥控器 发出拉请求

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

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

项目经理可以在他的主要在线版本中接受您的更改。

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

当你在服务器上fork一个repo时,不需要复制内容,因为两个repo将使用来自同一服务器的相同[固定对象]内容。“诀窍”在于管理不同的用户观点,以便每个用户都相信他们拥有完整的个人回购副本。在fork之间的push和fetch只是更新用户的指针。

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

在服务器上分叉的能力意味着Github的大存储额度平均来说并不是那么大,因为每个人都共享一个单一的底层回购。

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

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