首页 文章

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

提问于
浏览
155

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

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

8 回答

  • 2

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

    • fork您要发送拉请求的repo

    • 将您的本地更改推送到您的遥控器

    • 问题拉请求

  • 116

    基本上,是的 . A fork is just a request for GitHub to clone the project and registers it under your username ; GitHub还跟踪两个存储库之间的关系,因此您可以可视化两个项目(和其他分支)之间的提交和拉取 .

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

  • 17

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

    简而言之:

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

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

    几个其他有趣的dicussions -

    Are git forks actually git clones?

    How do I update a GitHub forked repository?

  • 6
    • 分叉项目在您的在线存储库(repo)上 .

    • 克隆项目在您的本地计算机上(我通常在分配回购后克隆) .

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

    项目经理可以接受它以获得他的主要在线版本的更改 .

  • 3

    克隆是您正确复制的地方,以及存储库的两个(可能是不同的)版本之间的分离 . 修改一个repo时,必须使用push命令将新内容主动复制到另一个repo . 并且其他回购的变化取而代之 .

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

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

    能够在服务器上进行分叉意味着Github的大容量存储容量平均不大,因为每个机构共享一个单独的底层存储库 .

  • 3

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

  • 14

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

    Why are my contributions not showing up

    提交是在一个分叉中进行的提交将不计入您的贡献 . 至要使它们计数,您必须执行以下操作之一:打开pull请求以将更改合并到父存储库中 . 要分离fork并将其转换为GitHub上的独立存储库,请联系GitHub支持 . 如果fork具有自己的分支,请让支持知道分支是否应随存储库移动到新网络中或保留在当前网络中 . 有关更多信息,请参阅“关于叉子” .

  • 94

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

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

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

相关问题