【问题标题】:Should you fork or branch on Github? [closed]你应该在 Github 上分叉还是分支? [关闭]
【发布时间】:2011-07-20 08:55:48
【问题描述】:

许多 github 存储库要求在每次基本代码更改时创建一个分支。

这与 git 中的分支完全一样。

github为什么要引入forks?

【问题讨论】:

    标签: git github git-branch git-fork


    【解决方案1】:

    (我喜欢 git 早午餐的想法 - git 用户在周日聚在一起吃很多油炸食品;))

    在 github 上分叉一个项目并在您自己的存储库中进行更改的想法是,项目的所有者不需要信任您或授予您对其存储库的推送访问权限。如果您希望他们考虑合并您的存储库中的代码,那么您可以向他们发送pull request。 GitHub 有一个很好的拉取请求系统,上游开发人员可以在其中审查和评论您的贡献。

    在一组值得信赖的开发人员中,每个人都可以推送到一个共享存储库,您通常会将您开发的每个新功能都推送为一个新的主题分支,并要求其他人审查您的工作并考虑将其合并。

    关于 git 的许多优点之一是,特定分支提示位于哪个存储库并不特别重要 - 提交将始终具有相同的 SHA1sum,因此您可以随意推送和拉取它。不管它是在 GitHub 上的一个分支中,还是被推送到共享存储库或其他什么...

    【讨论】:

    • 谢谢。这解释了很多(:但我直到现在才明白,为什么我不能在早午餐时也这样做。
    • @uhbif19:像 GitHub 这样的网站可能有一个安全模型,您可以在其中指定某些用户只允许推送到具有特定名称的分支。但是,我认为这对于存储库所有者来说实施起来很头疼,而且配置起来很复杂——GitHub 模型相当优雅,因为它很容易理解,同时仍然 (a) 允许任何人通过分叉和发出拉取请求来做出贡献,以及 (b ) 允许受信任的协作者直接推送到特定的存储库。
    • @uhbif19:顺便说一句,我认为这只是你帖子中的一个错字,但既然你在那条评论中重复了它,我可能应该指出它们是“分支”而不是“早午餐”。
    • @Mark Longair 这是一个大错字(:
    • 好的。据我了解,git 不能为不同的分支提供不同的访问权限。因此,如果开发人员可以访问她自己的分支,那么他也可以访问 master 分支。
    【解决方案2】:

    要稍微解释一下“为什么我不能将我的分支推送到他们的仓库?”的问题,请考虑即使 github 让您可以做到这一点而不会破坏每个人的整个仓库,大多数人维护者仍然不乐意让他们干净的 repo 变成数十​​或数百个分支的垃圾场。

    看到这些分支的其他贡献者会认为上游开发人员正在开发它们,即使它们确实是来自第三方的长期被遗弃的半成品。

    有趣的是,无论哪种方式,您的工作流程都完全相同,只是您在上游存储库的某个位置单击了“分叉”按钮。

    比较:

    1. git clone git://github.com/somebody/someproject
    2. git checkout -b mycoolfeature
    3. hack hack hack
    4. git push origin mycoolfeature
    5. 为 mycoolfeature 分支提交拉取请求

    1. 在 github.com/somebody/someproject 点击“fork”
    2. git clone git://github.com/you/someproject
    3. git checkout -b mycoolfeature
    4. hack hack hack
    5. git push origin mycoolfeature
    6. 为 mycoolfeature 分支提交拉取请求

    创建分叉确实没有任何开销。

    如果您已经克隆了上游存储库,并且担心必须进行新的克隆并浪费一些时间,请尝试以下工作流程:

    1. 点击分叉
    2. cd someproject(你现有的克隆)
    3. git remote add myfork git://github.com/you/someproject
    4. git checkout -b mycoolfeature
    5. hack hack hack
    6. git push myfork mycoolfeature
    7. 为 mycoolfeature 分支提交拉取请求

    希望这会有所帮助!

    【讨论】:

      【解决方案3】:

      github fork 意味着您有一个 github 存储库,因此您可以将更改推送到此。这意味着您所做的更改在 github 上是可见的,但原始所有者不需要包含它们。

      创建分叉可为您提供可写版本的存储库。

      在这方面,分支与分叉完全不同。一个叉子可以有很多分支。

      【讨论】:

        猜你喜欢
        • 2021-05-26
        • 2012-06-19
        • 2014-01-21
        • 2010-10-08
        • 2011-04-01
        • 2012-12-18
        • 2012-03-02
        • 2011-05-19
        相关资源
        最近更新 更多