你应该在Github上派生还是分支?

4
许多GitHub存储库要求在每次关键代码更改时创建一个fork。
这与git中的分支完全相同。
为什么GitHub要引入forks呢?
3个回答

18

(我喜欢git brunch的想法——让git用户在周日聚会,享用大量油炸食品;))

在github上fork一个项目并在你自己的仓库中进行更改的想法是,项目所有者不需要信任你或将推送权限给你。如果你希望他们考虑从你的仓库合并代码,则可以向他们发送pull request。GitHub拥有一个很好的pull request系统,其中上游开发人员可以审查和评论你的贡献。

在一群信任的开发人员中,每个人都可以推送到一个共享的仓库中,你通常会将你开发的每个新特性作为一个新的主题分支推送,并要求其他人审核你的工作并考虑将其合并。

Git的许多优点之一是,特定分支端点位于哪个存储库并不特别重要——该提交始终具有相同的SHA1校验和,因此您可以随意推送和拉取。无论它在GitHub上的一个fork中还是推送到共享存储库中,都无关紧要......


谢谢。这解释了很多(: 但是我到现在还不明白,为什么我不能用分支来做到这一点。 - uhbif19
1
@uhbif19:像GitHub这样的网站可以拥有安全模型,您可以指定某些用户只能将代码推送到特定名称的分支。然而,我认为这将是一个头疼的实现,并且对于存储库所有者来说配置也会很复杂 - GitHub的模型相当优雅,因为它易于理解,同时仍然(a)允许任何人通过fork和pull request进行贡献,以及(b)允许受信任的协作者直接向特定存储库推送。 - Mark Longair
2
顺便说一下,我认为这只是你帖子中的一个笔误,但既然你在评论中重复了它,我应该指出它们是“分支”而不是“早午餐”。 - Mark Longair
1
@Mark Longair 这只是一个大的打字错误(: - uhbif19
@ubhif19:你可以通过钩子来阻止某些用户更新特定分支,或者通过更改仓库中文件的权限来限制访问特定分支。但这比GitHub的模型要复杂得多... - Mark Longair
显示剩余2条评论

12
稍微解释一下你的问题“为什么我不能只将我的分支推送到他们的存储库?”,请考虑即使GitHub让您这样做而不会潜在地破坏所有人的整个存储库,大多数维护者仍然不会高兴将其清洁的存储库变成几十个或数百个分支的倾倒场。

其他贡献者看到这些分支会认为上游开发人员正在处理它们,即使它们实际上是来自第三方的已经被放弃的未完成的贡献。

有趣的是,您的工作流程无论哪种方式都完全相同,只需在上游 repo 上某个时刻单击一个“fork”按钮即可添加。

对比一下:

  1. git clone git://github.com/somebody/someproject
  2. git checkout -b mycoolfeature
  3. hack hack hack
  4. git push origin mycoolfeature
  5. submit pull request for mycoolfeature branch

  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. submit pull request for mycoolfeature branch

对于您来说,创建一个 fork 实际上没有任何额外的负担。

如果您已经克隆了上游 repo,并且担心您必须制作一个新的克隆并浪费一些时间,请尝试此工作流程:

  1. 点击 fork
  2. cd someproject(您现有的 clone)
  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. submit pull request for mycoolfeature branch

希望这可以帮到你!


0

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

创建一个fork为你提供了一个可写版本的仓库。

在这方面,分支与fork完全不同。一个fork可以有许多分支。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接