阅读更多

2顶
0踩

开源软件

转载新闻 一些实用的GitHub模式

2016-01-15 11:31 by 副主编 mengyidan1988 评论(0) 有6281人浏览
英文出处:Jake Benilov
译文来自:伯乐在线
我的日常工作和开源工作经常要用到 git 和 GitHub ,所以我发现了有一些我经常用到的实用模式。

下文中我会把 pull 请求(pull request)简写成PR。

1. 剥离的PR


我什么时候用?
  • 工作在特性开发分支
  • 发现不好的代码想要马上就地修正,但是和我正在做的特性无关(例如一个小bug,或者哪里不一致,或者有违背代码规范)

我该做什么?
  • 暂停当前的进度(通过提交commit或者暂存stash)
  • 检出master分支
  • 新建分支
  • 修正代码,提交
  • 切换回特性开发分支,继续工作
  • 等特性开发分支合并(merge)到master分支后,再变基(rebase)到前面新建的分支上

这个既满足想要快速修正无关问题的愿望,又能保持特征开发分支的清晰明了,让评审变得更容易。
2. 乐观的分支

我什么时候用?
  • 有一个暂不能合并(例如持续集成构建失败,代码评审者很忙等原因)的分支(分支A)
  • 我需要基于分支A的代码做另一个改动

我该做什么?
  • 在分支A上创建一个新的分支(分支B)
  • 等分支A合并到master分支后,把分支B变基到master分支,并解决产生的任何冲突
  • 这样在分支A上对bug的修正都变基到分支B上了
  • 这种处理有冲突的风险,如果在分支A上做的改动特别大。但是这个乐观的策略95%的情况都工作良好。


3. 机智的PR

我什么时候用?
  • 假设我做的修改事实上不需要评审
  • 我还是需要我的队友知道这件事

我该做什么?

  • 在分支上做修改
  • 报一个PR
  • 自己迅速合并这个PR

这个方法不会阻碍我的继续,但是GitHub还是会通过邮件通知我的队友这个PR。因此大家觉得有异议也都可以评论这个修改。

4. 偷偷摸摸的提交

我什么时候用?
  • 代码评审过了,并且合并到了master
  • 我需要做一个小改动(例如复制改动,或者bug修正),但是没必要通知别人

我该做什么?
  • 只要把新的提交push到master

5. the roger roger 评论

我什么时候用?

  • 从分支的代码评审那里收到了可操作的回馈
  • 已经基于回馈做好了相应的修改

我该做什么?
  • * 评论包含了该修改提交的引用的PR
  • * GitHub会聪明地在差异链接处增加引用的次数,这样我的同事:
  • → 得到修改的邮件通知
  • → 简单地点击提交差异链接
  • → 知道他们可以继续代码评审了


6. 慢慢爬的提交

我什么时候用?

  • 发现自己引入了一个小小的格式化的bug(例如不必要的空格,文件最后没有换行等),或者
  • 某逻辑代码修改实际上属于前一个提交, 或者
  • 代码不可提交(例如某些测试未成功)但是我还是想要回退到这个状态,这样我可以安全地测试

我该怎么做?
  • 前两种情况,我会补救amend前一次提交
  • 第三种情况,我有一个正在开发的(爬行的)提交,我渐进地进行补救(或者如果实验失败那就回退)直到我的代码可以真正提交了。


7. 强制修改的分支

我什么时候用?

  • 我需要补救一个远端功能开发分支,例如提交信息里的说明非常糟糕

我该做什么?
  • 在本地补救提交
  • 把该功能开发分支强制推送到远端的版本库
  • 强制推送到远端分支应该是 git 的一个禁忌,但是我的经验是这样处理很少有问题(只要它是普通分支,不是master就行)。GitHub 能很好地处理强制推送到PR分支,例如不会丢失前一次的提交的评论。

8. 重新格式化剥离

我什么时候用?
  • 我想修改同时格式化代码

我该做什么?
  • 在master上做一个仅包含重新格式化部分的提交
  • 把我分支变基到master
  • 这种方法,让分支的差异在代码评审者眼里变得更加清晰明了,因为它不包含格式化

9. 原型PR
我什么时候用?

  • 想要让我的点子在写大量实现代码前得到大家的反馈

我该做什么?
  • 在某个分支上做点整理
  • 为此报一个PR,目的不是要发布最终代码,而是作为大家讨论的出发点
  • 当达成一致开始下一步时关闭该PR(并且删除分支)
  • 新建另外一个分支和PR,这次好好写代码

我以前习惯于当代码完成时应该报一个PR。现在我真正领悟到了为什么“pull request是一个开始讨论的好办法” —— GitHub的围绕PR的功能(例如内联评论、回复、通知和比较差异)对于促进代码和设计讨论堪称卓越,还可以防止开发者偏离正题太远,跑到死胡同。
来自: 伯乐在线
2
0
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • Nginx 1.8 稳定版正式发布

    Nginx 1.8 稳定版发布啦,合并了许多Nginx 1.7.X 主线版本的新特性,包括: "tcp_nodelay" 指令支持后台 SSL 连接 线程池可以用来查看缓存文件头 "proxyrequestbuffering" 指令 …… 发布:Nginx 下载:http://nginx.org/en/download.html 微博:Twitter 关于Nginx Nginx(发...

  • nginx版本如何选择?

    生产环境使用Stable version:最新稳定版,现在最新的版本是nginx-1.8.1 注意各版本的区别:Nginx官网提供了三个类型的版本 1、Mainline version:Mainline 是 Nginx 目前主力在做的版本,可以说是开发版 2、Stable version:最新稳定版,生产环境上建议使用的版本 3、Legacy versions:遗留的老...

  • Nginx官方版本说明##Mainline version&Stable version&Legacy versions

    Nginx官网提供了三个类型的版本 Mainline version:Mainline 是 Nginx 目前主力在做的版本,可以说是开发版 Stable version:最新稳定版,生产环境上建议使用的版本 Legacy versions:遗留的老版本的稳定版 官方下载地址:http://nginx.org/en/download.html

  • 平滑升级Nginx到新版本v1.12.1修复Nginx最新漏洞CVE-2017-7529

    平滑升级Nginx到新版本v1.12.1修复Nginx最新漏洞CVE-2017-7529的解决方案2017年7月11日,Nginx官方发布了一个新的安全漏洞公告(漏洞编号:CVE-2017-7529),该漏洞系nginx的range过滤器的整数溢出漏洞,远程攻击者通过构造特定请求可利用该漏洞导致信息泄露,目前官方评级为中级。(当使用Nginx标准模块时,如果文件头从缓存返回响应,允许攻击者获取缓存文

  • 我个人的Nginx-1.12.2实践:安装,编译与测试(★firecat推荐,针对TCP四层负载均衡★)

    http://nginx.org/ http://nginx.org/download/ Nginx有两种方式实现TCP代理功能: 一种是使用nginx_tcp_proxy_module模块,一般用于Nginx早期版本。 一种是使用ngx_stream_core_module模块,用于1.9及其以后版本。 本文介绍后者,即使用stream的方式来实现TCP代理。   一、Linux Ce...

  • nginx三种发行版本的选择

    nginx三种发行版本的选择 ​ 在nginx官方罗列出三种大版本,有些小伙伴可能一开始不知道如何选择,如下图: 网址:http://nginx.org/en/download.html ​ 荧光标注的Mainline version、Stable version、Legacy version为nginx选择的三大块版本,其分别为: ​ 1)Mainline version:nginx主力版本...

  • centos7服务器上安装nginx1.12.2

    centos7服务器上安装nginx1.12.2

  • nginx的配置文件最全版(使用最新稳定版NGINX1.8.0)

    # 使用的用户和组 user nginx nginx; # 指定工作衍生进程数;一般几核CPU就配置几个。nginx进程数,建议设置为等于CPU总核心数。 worker_processes 1; #全局错误日志及PID文件;全局错误日志定义类型,[ debug | info | notice | warn | error | crit ] error_log /var/log/nginx/error.l

  • nginx从1.6.3升级至1.12.2版本(安装也可参考此文)

    准备环境:(仅针对没有安装过nginx的系统)检查并安装所需的依赖软件 1).gcc:nginx编译依赖gcc环境   安装命令:yum -y install gcc-c++ 2).pcre:(Perl Compatible Regular Expressions)是一个Perl库,包括 perl 兼容的正则表达式库。nginx的http模块使用pcre来解析正则表达式.   安装命令:yum i...

  • 构建高效安全的Nginx Web服务器

    一、为什么选择Nginx搭建Web服务器 Apache和Nginx是目前使用最火的两种Web服务器,Apache出现比Nginx早。Apache HTTP Server(简称Apache)是世界使用排名第一的Web服务器软件,音译为阿帕奇,是Apache软件基金会的一个开放源码Web服务器,可以运行几乎所有的计算机平台,其次开放的API接口,任何组织和个人都可以在它上面扩展和增加各种需要功能

  • Nginx1.12.1后端节点健康检测+会话保持方案

    Nginx社区版,也就是我们能从官网免费下载到源码并且编译的版本,不是一个合格的商业负载均衡器。为什么这么说呢,是因为社区版在反向代理负载均衡这个功能上,很多重要的工作的解决方案是非常幼稚或者说是不成熟的。主要表现在两个方面,后端被负载均衡Web服务器的健康监测和Session回话保持功能。 首先说回话保持,nginx官方给出的解决方案是ip_hash,也就是根据访问客户的源IP地址进行分发。表

  • nginx优化的一些建议

    1.1隐藏Nginxheader里版本号信息 1、查看版本号 curl -I 127.0.0.1 HTTP/1.1 200 OK Server: nginx/1.6.2 Date: Sat, 14 Mar 2015 08:15:29 GMT Content-Type: text/html Content-Length: 25 Last-Modified: Fri, 13 Mar 2015 10:52:27 GMT Co..

  • go 生成基于 graphql 服务器库.zip

    格奇尔根 首页 > 文件 > gqlgen是什么?gqlgen是一个 Go 库,用于轻松构建 GraphQL 服务器。gqlgen 基于 Schema 优先方法— 您可以使用 GraphQL Schema 定义语言来定义您的 API 。gqlgen 优先考虑类型安全— 您永远不应该看到map[string]interface{}这里。gqlgen 启用 Codegen — 我们生成无聊的部分,以便您可以专注于快速构建您的应用程序。还不太确定如何使用gqlgen?将gqlgen与其他 Go graphql实现进行比较快速启动初始化一个新的 go 模块mkdir examplecd examplego mod init example添加github.com/99designs/gqlgen到项目的 tools.goprintf '//go:build tools\npackage tools\nimport (_ "github.com/99designs/gqlgen"\n _ "github.com/99designs/gqlgen

  • 基于JAVA+SpringBoot+Vue+MySQL的社区物资交易互助平台 源码+数据库+论文(高分毕业设计).zip

    项目已获导师指导并通过的高分毕业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行!可以放心下载 技术组成 语言:java 开发环境:idea 数据库:MySql8.0 部署环境:maven 数据库工具:navicat

  • 法研杯2021类案检索赛道三等奖方案源码+项目说明+数据.zip

    法研杯2021类案检索赛道三等奖方案源码+项目说明+数据.zip是一个专为计算机相关专业(如计科、信息安全、数据科学与大数据技术等)学生设计的宝贵学习资源。该压缩包包含了完整的项目源码、详细的项目说明文档以及用于训练和测试的数据集,旨在帮助参赛者深入理解并掌握类案检索的相关技术和方法。该项目通过实际案例,展示了如何运用自然语言处理和机器学习技术对法律案件进行智能检索和匹配。项目内容涵盖了从数据预处理、特征提取到模型训练和评估的全过程,为学习和研究类案检索技术提供了全面的参考。本项目不仅适合作为课程设计、期末大作业或毕设项目的参考,也是企业员工提升技能、进行实践操作的优质学习资料。通过实际操作和学习该项目,用户可以加深对类案检索技术的理解,并在实践中不断提升自己的技能水平。请注意,由于该资源包含完整的项目源码和数据集,下载和使用时请确保遵守相关法律法规和道德规范,尊重知识产权和隐私权。同时,建议用户在使用前仔细阅读项目说明文档,了解项目的整体架构和使用方法,以便更好地利用该资源进行学习和研究。

  • 基于Cesium实现的对倾斜摄影模型的单体化分层方案源码.zip

    本资源提供了基于Cesium实现的倾斜摄影模型单体化分层方案的完整源码,旨在帮助开发者深入理解并实践三维地理空间数据的处理与展示。通过Cesium平台,用户能够将倾斜摄影获取的高精度三维模型进行单体化和分层处理,实现对模型中每个独立元素的精细管理和交互操作。该资源适合具备一定计算机编程基础的学习者,特别是对Cesium感兴趣的学生、研究人员及GIS行业从业者。通过下载并学习这些源码,用户可以掌握倾斜摄影模型在Cesium中的加载、单体化以及分层显示等关键技术,进而提升自己在三维地理信息系统开发领域的技能水平。

  • Go 的 PostgreSQL 驱动程序和工具包.zip

    Go 的 PostgreSQL 驱动程序和工具包 pgx - PostgreSQL 驱动程序和工具包pgx 是 PostgreSQL 的纯 Go 驱动程序和工具包。pgx 驱动程序是一个低级、高性能接口,它公开了 PostgreSQL 特定的功能,例如LISTEN/ NOTIFY和COPY。它还包括一个标准database/sql接口的适配器。工具包组件是一组相关的软件包,用于实现 PostgreSQL 功能,例如解析线路协议以及 PostgreSQL 与 Go 之间的类型映射。这些底层软件包可用于实现替代驱动程序、代理、负载均衡器、逻辑复制客户端等。示例用法package mainimport ( "context" "fmt" "os" "github.com/jackc/pgx/v5")func main() { // urlExample := "postgres://username:password@localhost:5432/database_name" conn, err := pgx.Connect(context.B

Global site tag (gtag.js) - Google Analytics