关于Pull Request的十个建议

标签: 编程技术 git | 发表时间:2015-02-25 20:12 | 作者:techug
出处:http://www.vaikan.com

Pull Request 是 BitbucketGitHub 等源代码托管系统为了方便开发者之间协作而提供的一个功能,它提供了一个用户友好的 Web 界面来帮助审查人员进行代码审查。开发人员可以通过 GitHub 发出 Pull Requests 要求请求他人将程序拉下来进行代码审查。一个好的 Pull Request 不仅仅只是代码的事情,还牵涉到代码审查者对代码的审查,所以开发者不仅要写出好的代码,还必须迎合审查者的审查工作,才能给使得自己贡献的代码顺利通过审查并合并到 master 分支。现对丹麦的程序员、软件架构师、独立顾问 Mark Seemann 在自己博客中发布的一篇题为《 关于 Pull Request 的十个建议》的文章进行一个全面的整理,以供读者阅读和参考。具体内容如下:

1. 进行较小的 Pull Request

一个小且集中的 Pull Request 会使得提交的代码更加容易通过审核。据 Mark Seemann 根据自己的经验透漏,对提交代码进行审查所花费的时间是随着代码大小呈指数增长,而非线性增长;Pull Request 多大才合适与 Pull Request 做了什么相关,最好少于 12 个文件的改变。如果 Pull Request 非常大,审查者就需要安排连续、相对比较长的时间进行审查,就会造成审查过程的延迟。

2. 每个 Pull Request 只做一件事

就如软件设计模式中的 单一责任原则所指:一个类只负责一个功能领域中的相应职责,因此一个 Pull Request 也应只关注一件事情。如果一次 Pull Request 做了多件事情的话,将会增加审查过程的延迟、审查被拒绝的可能性。

3. 注意代码行的字数,最好少于 80 个字

代码审查者会使用不同的审查工具来审查提交的代码,并且 GitHub 和 Stash 还提供了不同形式的视图,这样就使得代码审查者能通过不同视图非常方便来审查用户的提交。如果代码行比较宽的话,审查者就不能在一个屏幕或者半个屏幕中来阅读代码,不得不拖动滚动条来阅读代码。为了使得代码比较容易审查,每行代码最好少于 80 个字符。

4. 避免重新格式化代码

就算自己觉得应该改变当前代码的格式以适合自己的风格,但是请不要这么做。在源代码上,用户对每个字节的改变将会在不同的审查视图显示出来。有些审查者会选择忽略空格改变,但是有些审查者会审查这些代码,对这些格式化引起的代码审查属于不必要的审查。如果真需要解决空格问题的话,就需要在其他文件里移动代码、改变格式或者对代码做其他样式改变,并在 Pull Request 注释中给出相应的说明。

5. 确保代码能够编译通过

在提交 Pull Request 时,应该首先在自己的电脑上进行编译构建。在编译构建过程中,务必注意编译过程出现的警告,要把警告当作错误来对待,这些警告可能不会阻止编译,就有可能被忽略。然而,当用户 Pull Request 操作引起了很多编译警告的话,代码审查者就有可能拒绝对应的提交。

6. 确保提交的代码能够通过所有测试

即使问题代码已经做了自动化测试,但是在提交 Pull Request 时,也要务必保证针对代码的所有测试都必须通过。

7. 添加测试

为代码建立测试规则,即使出现问题的代码已经做过了自动化测试,最好也要为自己提交的代码也做下测试。

8. 记录下自己提交的原因

利用文档对代码进行注释、对自己的代码直接进行注释、利用版本控制器提供的提交信息功能备注信息、利用 Pull Request 管理系统(如 GItHub 或者 Stash)添加自定义的 Pull Request 注释信息。

9. 编写符合编码规范的代码

按照代码正确性规则编写代码,并附上有效的代码注释、提交信息、Pull Request 信息等。

10. 避免颠簸

不同审查者对 Pull Request 有可能具有不同的观点,这就会导致颠簸的情况,就需要用户移除冲突的提交和推送修改的分支,并备注有效的信息。

相关 [pull request] 推荐:

关于Pull Request的十个建议

- - 外刊IT评论
Pull Request 是 Bitbucket、 GitHub 等源代码托管系统为了方便开发者之间协作而提供的一个功能,它提供了一个用户友好的 Web 界面来帮助审查人员进行代码审查. 开发人员可以通过 GitHub 发出 Pull Requests 要求请求他人将程序拉下来进行代码审查. 一个好的 Pull Request 不仅仅只是代码的事情,还牵涉到代码审查者对代码的审查,所以开发者不仅要写出好的代码,还必须迎合审查者的审查工作,才能给使得自己贡献的代码顺利通过审查并合并到 master 分支.

浅谈 Pull Request 与 Change Request 研发协作模式

- - IT瘾-dev
说起 PullRequest 相信大部分人都不会陌生,它是由 Github 推出的一种开源协作模式,由于 Gitlab 占据着企业内部私有部署的半壁江山,这种模式也更多的用在企业内部代码审核流程,也就是所谓的 CodeReview. 其实还有很多企业和团队会选择 Gerrit 这个工具,Gerrit 提供的是 ChangeRequest 模式,这种模式更具有针对性,对代码审核的粒度也更细,近期有客户需求在 Gitee 上实现类似 ChangeRequest 的需求,所以针对两种模式做一个介绍,探讨两种模式的具体适用场景.

Android PULL解析XML

- - CSDN博客移动开发推荐文章
int eventType = parser.getEventType();//产生第一个事件. while(eventType!=XmlPullParser.END_DOCUMENT){//只要不是文档结束事件. String name = parser.getName();//获取解析器当前指向的元素的名称.

登录密码与HTTP Request

- - 博客园_首页
我们知道,在一些主流的浏览器中按F12,就会拉出一个查看web访问详细信息的窗口,在firefox中叫firebug,在chrome或者IE中,则叫developer tools,他们功能都大同小异,当然,比较重要的自然是查看http request与response, 幸运的是,这三个工具都把其放在一个叫Network的tab下面,虽然显示格式略有不同,但基本信息都是一样的.

http request乱码的真相

- - ImportNew
首先,从浏览器端看下有多少种情况:. 1.在浏览器的地址栏,或者搜索框里输入地址:http://www.test.com/衣服/search?keyword=T恤. 2.在一个指定了编码的网页中,提交一个form,如:.

你好

.

Struts2获取request三种方法

- - 企业架构 - ITeye博客
Struts2获取request三种方法. struts2里面有三种方法可以获取request,最好使用ServletRequestAware接口通过IOC机制注入Request对象. 在Action中获取request方法一:. 在Action中的代码:. 在JSP页面中获取其中的值:. 方法二:通过ServletActionContext类来获取,使用struts2经验如果处理get传参是中文,只能使用该方法进行处理乱码问题.

Let's make a SOAP request from command line(curl)?

- -
There could be a chance where you need to make a request from your command line rather than installing a tool such.

android解析XML总结-SAX、Pull、Dom三种方式

- - CSDN博客移动开发推荐文章
     在android开发中,经常用到去解析xml文件,常见的解析xml的方式有一下三种:SAX、Pull、Dom解析方式. 最近做了一个android版的CSDN阅读器,用到了其中的两种(sax,pull),今天对android解析xml的这三种方式进行一次总结. xml示例(channels.xml)如下:.

fred: 使用 NodeJS + Express 從 GET/POST Request 取值

- - Planet DebianTW
過去無論哪一種網站應用程式的開發語言,初學者教學中第一次會提到的起手式,八九不離十就是 GET/POST Request 的取值. 但是,在 Node.js + Express 的世界中,彷彿人人是高手,天生就會使用,從不曾看到有人撰文說明. 這應該算是開發 Web Service 的入門,在 Client 與 Server 的互動中,瀏覽器發出 GET/POST Request 時會傳值給 Server-side,常見應用就是網頁上以 POST method 送出的表單內容,或是網址列上的 Query Strings (ex: page?page=3&id=5).

[Java][web]利用Spring随时随地获得Request和Session

- - CSDN博客推荐文章
利用Spring随时随地获得Request和Session. 在web.xml中添加  . 1、方法一:通过代码实现. 2、方法二:通过注解实现:. 三、关于RequestContextListener的背景知识:. 基于LocalThread将HTTP request对象绑定到为该请求提供服务的线程上.