Bo2SS

Bo2SS

7 使用GitHub进行团队协作

47 | 创建团队的项目#

在创建仓库时,Owner 选择组织即可。

  • 可以添加 Team,赋予权限。

48 | 怎样选择适合自己团队的工作流?#

需考虑因素:团队人员的组成、研发设计能力、输出产品的特征、项目难易程度。

1)主干开发方式(谷歌、Meta)

image

  • 特点:变更直接集成到主干,快速迭代。
  • 适用于:
    • 团队系统设计和开发能力强,有一套有效的特性切换实施机制,类似于功能开关能力;
    • 团队成员能力强,开发简单独立、升级成本低的组件,即组件开发。

2)Git Flow

image

  • 特点:流程复杂,相对繁琐。
  • 适用于:团队不具备主干开发能力,有预定的发布周期,对产品质量要求高,需执行严格的发布流程。

3)Github Flow

image

  • 特点:master 作为主线,相对 Git Flow 更严格。
  • 适用于:团队不具备主干开发能力,需随时集成随时发布。

4)Gitlab Flow(+ 生产分支)

image

  • 特点:master 分支 + 生产分支,发布需要先部署到生产分支。
  • 适用于:团队不具备主干开发能力,无法控制准确的发布时间。

5)Gitlab Flow(+ 环境分支)

image

  • 特点:master 分支 + 环境分支 + 生产分支,发布需要先部署到环境分支测试,测试通过再部署到生产分支。
  • 适用于:团队不具备主干开发能力,需逐个通过各个测试环境的验证才能发布。

6)Gitlab Flow(+ 发布分支)

image

  • 特点:master 分支 + 多个发布分支,可维护不同版本。
  • 适用于:团队不具备主干开发能力,需对外发布和维护不同版本。

小结:每种工作流都有自己的特点,但又有一些相似点,团队使用适合自己的即可。

49 | 如何挑选合适的分支集成策略?#

版本树演进:Insights——Network

eg.

image

设置分支合并策略:Settings——Options——Merge Button,共 3 种。

image

1)非线性:用 merge 的方式合并( git merge ,⚠️不是 git merge --squash

eg.

image

2)线性:将要合并的所有 commits 整合成一个 commit,添加到目标分支上( git rebase ,⚠️不是 git merge --squash

eg.

image

3)线性:将要合并的所有 commits,添加到目标分支上( git rebase

eg.

image

❗️:

  • 当 Github 上有 Pull Request 后,管理者可以选择上面三种方式中的任意一种来合并(Github 执行)。
  • 后两种方式没有让分支相遇。

50 | 启用 issue 跟踪需求和任务#

Issues

  • 特点:状态分为 open 和 close,通过 Labels 分类,通过 Milestone 标识大的版本变化。
  • 可设置模板:Feature、Bug、自定义,可参考优秀的第三方库 。
  • 作用:促进团队交流,记录交流细节。

PS:国内优秀库:vuejs/vue——Issues

51 | 如何用 project 管理 issue?#

Projects

  • 创建看板功能,方便管理。
  • 可设置模板,针对 Issue、PR、CR 等等。

52 | 项目内部怎么实施 code review?#

Settings——Branches——Add rule(Branch protection rules)

  • 指定应用规则的分支 pattern
  • 勾选需要的规则,如 code review

image

53 | 团队协作时如何做多分支的集成?#

(合并结果参考第 49 节,本节探讨解决冲突方式)

场景:1)Beijing->master;2)Shanghai->master。⚠️:2)会产生冲突

  • Merge

处理 Shanghai->master 的冲突:

image

Github 会将先 master 合到 Shanghai 中解决冲突,形成新的 commit 后,再合入 master

  • Squash

处理 Shanghai->master 的冲突:

image

Github 会将先 master 合到 Shanghai 中解决冲突,形成新的 commit 后,再进行 squash 合并操作

  • Rebase

处理 Shanghai->master 的冲突:Github 无法合并,会卡在解决冲突后。

image

手动方式:回退到如下状态;

image

在本地让 Shanghai 基于远端的 master 变基,解决冲突(4 次,Shanghai 的 4 次 commit;更好的方式: git rerere官方文档

image

将本地 Shanghai 分支强制推送到远端(因为已经不是 fast-forwards)

image

最后再进行 rebase 合并操作:

image

相当于克隆了 7 个 commits~

❗️看起来多此一举,但从另一个角度来看,其明确区分了 Author 和 Committer 的责任。

54 | 怎样保证集成的质量?#

  • 配置服务
    • 在 Marketplace 里找,如 Travis CI、codecov 等等,在项目的 Setting--Integrations 里可以配置。
    • 除此之外,可以在个人的 Setting-- Developer settings--OAuth Apps 配置第三方服务,或在 GitHub Apps 添加自己的或开源的服务。
  • 配置分支保护规则
    • 去 Settings--Branches--Branch protection rules 设置,参考第 52 节。

55 | 怎样把产品包发布到 GitHub 上?#

Release 功能:将代码打包成二进制的压缩文件,方便测试、安装。

  • 配置 CI 脚本(如.travis.yml)的 before deploy 和 deploy 部分;
  • 配置 token 等。

56 | 怎么给项目增加详细的指导文档?#

Wiki 功能。

可参考优秀的 wiki 库,拉到本地,再推送到仓库对应的Wiki 地址(项目名后面添加了.wiki),这样就可以编写自己的说明文档了。

  • 可能需要去项目的 Settings——Options 里开启 Wikis。

这是非常实用的一章,主要针对 Github,下一章我们再一起看看 Gitlab 吧~

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。