Py学习  »  Git

在 GitHub 上提交代码必备指南!

程序员大咖 • 1 年前 • 155 次点击  
👇👇关注后回复 “进群” ,拉你进程序员交流群👇👇

【编者按】你是否经常参与开源项目?如果在 GitHub 上参与开源项目的 Pull Request,你知道正确的做法是什么吗?别担心,本文为你准备了详细的指南,希望对你有一定裨益。
作者 | Nick Skelton     
译者 | 弯月    责编 | 苏宓
出品 | CSDN(ID:CSDNnews)
以下为译文:

 1 

如果你是 PR 的作者


1. PR 不宜过大

将拉取请求(Pull Request,即 PR)控制在很小是一门艺术。在编写代码的时候,你经常会有重写、重构代码或整理代码的格式的冲动,但总的来说,优秀的开发人员会抵制一次性修改所有内容的诱惑。他们会集中一个目标,并将需要更改的代码量降到最低。有些人甚至会相互比较“删除的代码行数”与“增加的代码行数”比率。如果你需要重构和优化代码,那么请分别进行。不要找借口将所有改动都塞到一个  PR 中,这是懒惰。

相反,你应该想办法将 PR 控制在很小,这才是创造力。

2. 自我审查

创建好 PR 后,你应该进行全面的自我审查。在完成一段代码之后,你可能迫不及待地想将代码推送到 PR,然后等着其他人发现错误,尤其是你花了好几天的时间完成了一项比较大的改动时。别偷懒,要自律,你的工作还没有结束。
你可以在自我审查中,问问自己:“这个名字好吗?有没有更好的?”或者,“这个真的可以为 null 吗?”通过这样的问题,你不仅可以检查自己的代码,还可以在日常的编程工作中建立自我反思的好习惯。换句话说,这种自我审查的过程可以让你成为更好的开发人员。

3. 去掉不必要的文件

在自我审查的时候,你会经常发现某个文件只改了一些空格、调整了格式、优化了导入或一些文本更改,这些改动对 PR 根本没有影响。
遇到这种情况,你应该重新打开分支,将这些文件还原回去,你只是做了一些略微的改进,功能上没有变化,而且多余的文件出现自 PR 中只会给审核代码的人带来负担,尤其是 PR 比较大的时候。

如果格式化很重要,请创建一个单独的 PR,然后在 CI 中添加一个格式化的工具,并利用工具整理整个应用的格式。但是,避免这些不必要的文件很重要,这是对代码审核者的尊重。此外,这些无关紧要的变动还会污染 git 的历史记录,让人们很难通过这些历史记录找到文件某些更改背后的意图。

4. 创建有意义的标题

一般,标题我们都会照抄分支名称或相关的票据。关于标题的规则只有一条,即遵循某种约定,建立简洁而又意义的标题,基本思想与分支命名一样。

创建拉取请求也是创建文档,保持拉取请求的历史记录易于浏览,可以方便搜索过去的决策和思考过程。关注公众号:GitHub科技,获取一份特殊资料。

5. 有意义的描述

再次强调,你应该将 PR 视为文档,一篇经常会被阅读的文档。PR 的描述应尽可能全面,但要简洁,尽可能做到透过描述看懂你的意图和决策过程,无需花时间讨论。

有一种有效的方法是建立 PR 模板。模板的内容应与团队达成共识,并随时间的推移进行开发和调整,下面是给新手的一些建议:
  • 变更概述。你需要说明的 PR 中没有包含的方案(经过评估后被放弃的替代方法)。这样可以避免与审核代码的人重复讨论你已经尝试过的方案。

  • 面向审核者的问题/注释。你希望审核者对于哪些代码提供一些具体的建议?代码的哪些部分很安全,可以忽略?你重构了哪部分代码,变动的文件虽然很多,但没有任何功能上的影响。告诉审核者可以放心地跳过哪部分 PR,他们会非常感谢你。

  • 如何测试/演示。对于 QA 来说,这样的说明非常便利,比如预发布环境中的用户和密码、配置和设置说明等等,任何可以帮助审核者测试修改的内容。

  • 附件:屏幕截图和视频。图片和视频的表达能力更强。变化前后的演示非常便利

6. 确认每条评论

在远程异步通信中,有一点很重要,你需要向对方传达你看到了评论。有时,只需要一个简单的表情符号。无论评论多小,都不能忽视,尤其是在新团队中。一旦与团队建立融洽的关系,你就可以顺其自然了,因为你们之间互相都了解。但是,刚开始的时候,一定要有礼貌,注意言辞,以及个人的行为。

7. 合并需要征求每个人的同意

说起礼貌,你应该耐心等待别人提出意见,然后积极地给予回应。如果等待的时间过长,你可以通过电子邮件和即时消息询问,或者直接去找他们,让他们知道你还在等待。

在我看来,如果你们团队成员超过了 3 个人,则不必让每个人都审查每个 PR。制定一个系统来确定由谁来审查每个 PR,比如让每个人负责一些模块;如果你是新手,则可以让架构师/高级开发人员审查你所有的 PR。

 2 

如果你是审查者


下面的一些建议也同样适用于代码作者回复评论。

8. 签出代码

你的计算机上应该始终保有一个项目的两个克隆:一个用于正常工作,一个用于审查 PR。这样审查 PR 的时候,就不会影响到当前的任务了。

签出分支后,点击构建,并保持运行状态,同时切换到浏览器。

9. 阅读标题和说明

如果有人花了很大力气编写了自己的 PR 指南,那么你至少应该耐心地读完。在等待PR在你的另一个项目克隆上构建的同时,请阅读相关的票据,阅读 PR 的标题和说明,并提出你的审核意见。

10. 在本地验证你的建议

如果发现可以改进的地方时,请尝试在本地克隆中修改代码。当你是项目的新成员时,这一点尤为重要。即便你提出的建议无法实现,或者甚至根本编译不过去,也不必感到尴尬。在自己的 IDE 中修改代码,如果成功,你会收获满满的成就感;如果失败,你也会庆幸没有打扰到别人。

在确认你的建议可行后,不要让自己的工作白费,你可以将代码复制过去,放入 PR 注释中,这样作者就可以直接复制了。

11. 如果建议太大,就直接写成 PR

如果你发现自己的建议太大,那就不要浪费精力,直接在他们的分支上建个分支,然后创建一个 PR,合并到原来的 PR 中。这种 PR 不需要常规 PR 的花哨功能,因为它只是评论的一部分,可以让你们做进一步的探讨,然后由原作者考虑修改,最后如果一切顺利,则合并到主 PR 中。

12. 抵制评论的冲动

发表评论时,我们往往情不自禁说个滔滔不绝。克制这种情绪的关键是设身处地为他人着想。不要忘了回顾一下所有的评论,仔细想一想有多少评论确实会被多方接受,而且能尽快实现。微信搜索公众号:Java项目精选,回复:java 领取资料 。

以下是一些关于评论的技巧:

13. 如果没有更好的替代方案,请不要发表评论

如果你不喜欢代码的写法,请提出更好的方法,否则还是闭嘴。

14. 要有信心,不要偷懒

不要使用“也许”、“我不知道”、“如果”、“我不确定”之类暗示怀疑的词语。如果不确定,那么请反省一下,为什么你不确定。或者也可以做一些实验和研究,找回自信。

15. 修改代码之前先模仿原来的风格

每个人都有自己的风格,而且都对比较执着于自己的风格。刚加入新团队时,现有成员通常都会捍卫项目的现状,而新成员则会表达“他们的前一个项目有何不同,或者如何更好地完成工作”等看法。

适应现有的风格,可以让你尽快融入心团队,而他们也更愿意针对某些重要的方面提出建议,比如 SDK 的选择、体系结构决策以及模式和实践等等。在你完全掌握了他们的风格之后,再提出现代化的风格,他们更容易接受。

16. 挑剔是好事 

有时,同事审查你的代码,只提出了一些风格上的意见,看似很挑剔,你也会感到沮丧。 

但是,你应该这样想:审查者已经很难找出你代码中的实际问题。 

遇到挑剔的意见,比如关于风格的注释,你可以礼貌地强调 IDE 工具可以自动处理好 90% 的样式问题。

17. 面对面的交流

有时,你们两人针对某个 PR 的评论,反复争论不休。这个时候,你应该冷静一下,然后写一封邮件,约个时间面对面的交流。

网上的交流有时候来来回回,很浪费时间。还不如到会议室,面对面的交流,但切记冷静,反复思考自己的观点,而且一定要保持客观。面对面交流的目的是寻找最佳解决方案。

18. 心平气和

建立 PR,难免被审查者指出问题。所以,首先最重要的就是:挑刺。但是你需要专业地挑刺,不要带个人情绪。

请注意解读评论的方式,有些人并不是故意的,他们只是没有过多的思考,很着急,或表达能力不够好。他们提的意见都是出自善意。

19. 没有紧急的 PR

PR 之所以流行,有两个原因:
  1. 异步交流。开发人员可以随时进行审查和响应,这样可以避免自己的工作被打断或受干扰。

  2. 质量保证。在代码进入目标分支之前,对其进行检查和测试,以确保目标分支保持干净。通过队友发现日常使用的代码中的潜在问题。


如果你必须在 10 分钟内合并分支(一般非常不推荐这种做法),那么就不要发送消息要求别人立即审核代码,直接合并就行了。不要为了流程而打扰别人。如果你必须在短时间内合并分支,那么就找一个人进行结对编程,或者直接合并PR。

 3 

总结


PR 是一个很好的习惯。在过去十年中,我所从事的大多数项目都采用了这种标准的做法,如今我仍在新项目中学习关于 PR 的新知识和流程。

上述建议不一定适合所有项目,与制定严格的规则和流程相比,组建团队更为重要。在团队中,我们要友善待人,但也要有信心和纪律,同时以身作则,严格要求自己。

-End-

最近有一些小伙伴,让我帮忙找一些 面试题 资料,于是我翻遍了收藏的 5T 资料后,汇总整理出来,可以说是程序员面试必备!所有资料都整理到网盘了,欢迎下载!

点击👆卡片,关注后回复【面试题】即可获取

在看点这里好文分享给更多人↓↓

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/134334
 
155 次点击