关于GitHub repos,fork或创建新分支的最佳实践

时间:2014-07-25 17:47:29

标签: git github git-branch git-merge git-fork

我正在寻找最佳实践,在GitHub上分叉和分支。我已经阅读了这个Forking vs. Branching in GitHub,但它并不重要。

我们的5人团队正在开发同一个存储库,我们希望避免在代码中合并问题,冲突或回归。目标是让5个人在项目的不同部分工作,通常在同一个文件上。

我想知道它是否值得:

  • 分叉项目,工作和创建拉取请求,这样每个人都可以轻松地查看代码,或
  • 创建一个新分支 - 在工作完成后在master上工作并合并。

6 个答案:

答案 0 :(得分:21)

对我而言,处理具有多个开发人员的项目时的最佳做法是使用 gitflow 分支模型。

首先,主分支现在仅用于跟踪Semantic Versionning之后的应用,主要版本,次要版本或补丁版本的版本。

开发分支将是您项目的核心,因为它将在不同功能和您的版本之间架起桥梁。

这个系统有助于减少合并次数,就像一个简单的分支系统一样,但是添加了语义逻辑,以及它附带的友好和简单的命令。

有关gitflow的更多信息,您可以关注this link

答案 1 :(得分:11)

维护叉引入了额外的开销,因为每个fork需要从上游提取更改。当每个开发人员都可以访问共享存储库时,我认为这样做没有任何好处。

拉取请求对于代码审查可能是一种非常有用的机制,但它们并不要求您使用分叉。您可以在同一个存储库中创建分支,并使用拉取请求来管理将它们合并到主分支中。

答案 2 :(得分:3)

在我的办公室,我们遇到了类似的情况:一个大型项目,其中有五个或更多开发人员具有提交权限,并且通常至少有三个人随时都在使用它。我们使用带有分支和拉取请求的单个存储库来管理所有内容,但我们还没有遇到任何问题(无论如何都是由我们的源代码控制设置引起的)。

拉取请求是从其他开发人员那里征求代码评审的绝佳方式,当这些开发人员第二天可能正在使用您的代码时,这一点尤为重要。另一方面,分叉并没有真正提供任何好处;它是允许更广泛地访问受控代码库的问题的解决方案,并且当每个人都拥有对repo的访问权限时,该问题就不存在。

答案 3 :(得分:3)

Atlassian在他们的git教程页面上有关于分叉和其他git工作流之间差异的精彩文章。 (见Forking Workflow | Atlassian Git Tutorial

相关引言:

  

分岔工作流程的主要优点是可以集成贡献,而无需每个人都可以推送到单个中央存储库。开发人员推送到他们自己的服务器端存储库,只有项目维护人员可以推送到官方存储库。这允许维护者接受来自任何开发人员的提交,而不给他们对官方代码库的写访问权。

     

...

     

重要的是要理解分岔工作流中“官方”存储库的概念仅仅是一种约定。从技术角度来看,Git认为每个开发人员的公共存储库与官方存储库之间没有任何区别。事实上,使官方存储库如此正式的唯一因素是它是项目维护者的公共存储库。

     

...

     

所有这些个人公共存储库实际上只是与其他开发人员共享分支的便捷方式。每个人都应该使用分支来隔离单个功能,就像功能分支工作流和Gitflow工作流一样。唯一的区别是这些分支是如何共享的。在分岔工作流中,它们被拉入另一个开发人员的本地存储库,而在Feature Branch和Gitflow工作流中,它们被推送到官方存储库。

答案 4 :(得分:2)

我会以“集中”的方式工作,也就是说,拥有一个主要的仓库,每个人都会分叉,每个开发人员都会致力于他们自己的仓库,这使得代码审查过程变得更加容易。代码审查完成后,您可以将更改合并到主仓库。

这只是主要想法......

您还需要设置如何分支的策略。我建议Nvie model

答案 5 :(得分:1)

我觉得,瓶颈不是分叉或分支。在这两种方法中,您都需要手动干预合并/检查更改。

因此,瓶颈在于应用程序开发方法。当一个团队在同一个文件上进行协作时,我发现了一个问题。通过适当的架构设计,它可以作为单独的模块拆分为单独的文件吗?在运行时或构建时,可以聚合单独的模块(或文件)以形成整个功能(或单个文件)。

如果我们能够在该级别解决问题,一旦团队规模增加或功能复杂性增加,事情就会顺利进行。