开源特训营 - Lesson 5 - 社区如何评审代码
编辑:李明康
责编:袁睿斌
作者:课程助教 - 苏斌
主讲教师:张齐勋(北京大学)、赵生宇(同济大学)
实操基础:如何提交与Review PR
PR 的英文全称为"Pull Request",意思是将开发者的仓库与维护者的仓库内容进行合并。PR协作的基本流程包括:
开发者在本地仓库开发;
本地仓库提交到GitHub个人仓库;
从个人仓库向上游仓库发起PR;
维护者Review PR;
开发者与维护者讨论细节;
开发者根据要求修改代码并进行新的提交;
最终维护者合入PR。
对于开发者而言,提交PR时除了提交文件Commit之外,还要给出PR的标题和内容;对于维护者而言,通过PR的标题与内容了解PR的大概内容,并确定PR中的文件修改是否正确1合理,若有不合理之处要与开发者进行讨论,最终将PR合入。
理论基础:到底什么是PR
开源是一种大规模分布式异步协作生产软件的生产方式,是一种方法论。
PR是开源中由GitHub创造,运行在Git协作流程之上的Web协作模式,用于替代Linux开发中使用邮件进行Patch交付的流程。
1.开源为什么目前只用于软件生产,可以协作生产代码?可以生产其他内容吗?
文本化为大规模的协作和频繁修改迭代带来了可能,而代码是软件的文本化表现形式。文本的修改结果是一目了然的,增减一个字符都可以看得清清楚楚,但是对于二进制的文件来说,对其修改无法通过文本方式查看其修改内容。
2.为什么PR流程是有效的,从SVN到Git到PR,到底是什么决定了一个流程的有效性?
关于Git的起源,老师推荐了一个视频讲座
其中PR是更简单的可视化协作流程,协作规模越大则协作成本越高,需要有流程机制的设计来控制成本。
3.基于第2个问题,可否解决问题1?
我们需要考虑控制的成本因素,包括代码生产的成本和Review的成本,如果可以大幅降低上述成本,则可以支持其他类型内容生产的协作。
实操进阶:玩点新花样
CODE_STYLE明确表明了项目的代码规范,减少沟通成本;使用init类工具,将代码规范检查自动化,减少确认正确性的成本。
PULL_REQUEST_TEMPLATE明确了提交PR时应该提供的信息,以减少沟通成本。通过TEMPLATE可以对PR进行分类,减少指派到正确维护者的成本。
总结:代码要规范,文档要规范
另外,是否我们只能做到文档和代码协作呢?为什么文档和代码可以协作而其他形式的文件很难协作呢?事实上这里就牵涉到了 PR 最核心的内容,即如果检验产出物的正确性。而在不经意之间,GitHub 对 Markdown 的渲染本身也是 CI 的一种。那是否还有其他形式可以来进行 CI 呢?
老师也提到,理论上所有的数字产品都可以协作,但需要满足两点:
1、文本化,文本化是降低协作生产成本最重要的手段。
2、自动化检验,自动化检验是协作检验最重要的手段。而代码和文本只是有了很成熟的方案而已。
那对于 UML、SVG 等图片格式,事实上解决了上面两点,也是完全可以协作的
理论进阶:社会科学视角下的PR协作
在历史文明进程中,推动人类发展的动力包括理性、制度、协作和分工
最后老师布置了本周的作业:
对自己创建的项目编写合适的CODE_STYLE和PULL_REQUEST_TEMPLATE;
如果可以添加相应的自动化init则更佳,即使添加init,也需要提供文本描述文件;
参与已有项目,检查是否包含了相关文档,如果不包含,请提PR添加。
活动回顾视频
点击小程序观看第五期活动视频哦~
✨下节课程内容预告:
《如何提交一个合格的PR》主讲者:张齐勋 & 赵生宇
开源社简介
开源社是由国内外支持开源的企业,社区及个人,依“贡献,共识,共治”原则,所组织的厂商中立、纯志愿者、非营利的开源联盟,旨在共创健康可持续发展的开源生态体系,并推动中国开源社区成为全球开源软件的积极参与及贡献者。我们专注于开源治理、国际接轨、社区发展和开源项目。
相关阅读 | Related Reading
开源特训营 - Lesson 1 - 开源基础
开源特训营 - Lesson 2 - 项目启动
开源特训营 - Lesson 3 - GITHUB仓库管理
开源特训营 - Lesson 4 - 如何运营社区
开源特训营
喜欢本篇内容请给我们点个在看