阅读更多

2顶
0踩

开源软件

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

2016-01-15 11:31 by 副主编 mengyidan1988 评论(0) 有6315人浏览
英文出处: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的配置文件最全版(使用最新稳定版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三种发行版本的选择

    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从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..

  • 基于物联网智能化平台的智慧园区解决方案PPT(28页).pptx

    智慧园区,作为现代城市发展的新形态,旨在通过高度集成的信息化系统,实现园区的智能化管理与服务。该方案提出,利用智能手环、定制APP、园区管理系统及物联网技术,将园区的各类设施与设备紧密相连,形成一个高效、便捷、安全的智能网络。从智慧社区到智慧酒店,从智慧景区到智慧康养,再到智慧生态,五大应用板块覆盖了园区的每一个角落,为居民、游客及工作人员提供了全方位、个性化的服务体验。例如,智能手环不仅能实现定位、支付、求助等功能,还能监测用户健康状况,让科技真正服务于生活。而智慧景区的建设,更是通过大数据分析、智能票务、电子围栏等先进技术,提升了游客的游玩体验,确保了景区的安全有序。 尤为值得一提的是,方案中的智慧康养服务,展现了科技对人文关怀的深刻体现。通过智慧手环与传感器,自动感知老人身体状态,及时通知家属或医疗机构,有效解决了“空巢老人”的照护难题。同时,智慧生态管理系统的应用,实现了对大气、水、植被等环境要素的实时监测与智能调控,为园区的绿色发展提供了有力保障。此外,方案还提出了建立全域旅游营销平台,整合区域旅游资源,推动旅游业与其他产业的深度融合,为区域经济的转型升级注入了新的活力。 总而言之,这份智慧园区建设方案以其前瞻性的理念、创新性的技术和人性化的服务设计,为我们展示了一个充满智慧与活力的未来园区图景。它不仅提升了园区的运营效率和服务质量,更让科技真正融入了人们的生活,带来了前所未有的便捷与舒适。对于正在规划或实施智慧园区建设的决策者而言,这份方案无疑提供了一份宝贵的参考与启示,激发了他们对于未来智慧生活的无限遐想与憧憬。

  • MES制造企业生产过程执行系统:全方位协同管理,提升生产效率与质量的信息化管理平台,MES制造企业生产过程执行系统:全面协同管理,提升生产效率与质量管理水平,mes制造企业生产过程执行系统,是一套面向

    MES制造企业生产过程执行系统:全方位协同管理,提升生产效率与质量的信息化管理平台,MES制造企业生产过程执行系统:全面协同管理,提升生产效率与质量管理水平,mes制造企业生产过程执行系统,是一套面向制造企业车间执行层的生产信息化管理系统。 MES 可以为企业提供包括制造数据管理、计划排产管理、生产调度管理、库存管理、质量管理、人力资源管理、工作中心 设备管理、工具工装管理、采购管理、成本管理、项目看板管理、生产过程控制、底层数据集成分析、上层数据集成分解等管理模块,为企业打造一个扎实、可靠、全面、可行的制造协同管理平台 ,MES制造企业生产过程执行系统;生产信息化管理;制造数据管理;计划排产管理;生产调度管理;库存管理;质量管理;人力资源管理;设备管理;数据集成分析,MES制造企业生产执行系统:全面协同管理平台助力制造企业高效运营

  • C++指针与内存管理详解:避免常见错误及最佳实践

    内容概要:本文介绍了C++编程中常见指针错误及其解决方案,并涵盖了模板元编程的基础知识和发展趋势,强调了高效流操作的最新进展——std::spanstream。文章通过一系列典型错误解释了指针的安全使用原则,强调指针初始化、内存管理和引用安全的重要性。随后介绍了模板元编程的核心特性,展示了编译期计算、类型萃取等高级编程技巧的应用场景。最后,阐述了C++23中引入的新特性std::spanstream的优势,对比传统流处理方法展现了更高的效率和灵活性。此外,还给出了针对求职者的C++技术栈学习建议,涵盖了语言基础、数据结构与算法及计算机科学基础领域内的多项学习资源与实战练习。 适合人群:正在学习C++编程的学生、从事C++开发的技术人员以及其他想要深入了解C++语言高级特性的开发者。 使用场景及目标:帮助读者掌握C++中的指针规则,预防潜在陷阱;介绍模板元编程的相关技术和优化方法;使读者理解新引入的标准库组件,提高程序性能;引导C++学习者按照有效的路径规划自己的技术栈发展路线。 阅读建议:对于指针部分的内容,应当结合实际代码样例反复实践,以便加深理解和记忆;在研究模板元编程时,要从简单的例子出发逐步建立复杂模型的理解能力,培养解决抽象问题的能力;而对于C++23带来的变化,则可以通过阅读官方文档并尝试最新标准特性来加深印象;针对求职准备,应结合个人兴趣和技术发展方向制定合理的学习计划,并注重积累高质量的实际项目经验。

  • VSC下垂控制策略仿真模型:基于MATLAB 2014a及更高版本的全面支持与应用实践,VSC下垂控制策略仿真模型MATLAB版本支持及功能解析,VSC下垂控制策略仿真模型,支持MATLAB2014a

    VSC下垂控制策略仿真模型:基于MATLAB 2014a及更高版本的全面支持与应用实践,VSC下垂控制策略仿真模型MATLAB版本支持及功能解析,VSC下垂控制策略仿真模型,支持MATLAB2014a及以上版本 ,VSC下垂控制策略; 仿真模型; MATLAB 2014a及以上版本; 核心关键词,MATLAB 2014a及以上版VSC下垂控制策略仿真模型研究

  • 信息技术知识赛系统设计与实现(代码+数据库+LW)

    摘  要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装信息技术知识赛系统软件来发挥其高效地信息处理的作用,可以规范信息管理流程,让管理工作可以系统化和程序化,同时,信息技术知识赛系统的有效运用可以帮助管理人员准确快速地处理信息。 信息技术知识赛系统在对开发工具的选择上也很慎重,为了便于开发实现,选择的开发工具为Eclipse,选择的数据库工具为Mysql。以此搭建开发环境实现信息技术知识赛系统的功能。其中管理员管理用户,新闻公告。 信息技术知识赛系统是一款运用软件开发技术设计实现的应用系统,在信息处理上可以达到快速的目的,不管是针对数据添加,数据维护和统计,以及数据查询等处理要求,信息技术知识赛系统都可以轻松应对。 关键词:信息技术知识赛系统;SpringBoot框架,系统分析,数据库设计

Global site tag (gtag.js) - Google Analytics