Skip to content

[译]Git回滚合并

2015年5月26日

cover

团队使用Git和Git-Flow手记

2015年5月11日

去年10月份,在我们被产品节奏逼到墙角无路可走的时候,我们在几乎没有准备的情况下,在团队中引入了Git。目前时间已经过去半年,回顾这半年的时间,基本还是运作得比较顺利。当然过程中也少不了踩坑,因此记录一些心得。

Why Git?

如果用一句话来说的话,我们是冲“分支”而来的。背景如下:

团队的固定版本节奏为两周一个版本,一周半的时间开发,半周时间测试发布。如果使用软件工程中的概念来说的话,这是一个比较典型的瀑布式流程,即“需求->设计->开发->测试->发布”,然后周而复始,过程中几乎没有重叠。

伴随着瀑布式的流程,代码也只有一份,“开发->改bug->发布”,周而复始。

直到去年10月,公司做了一场声势浩大的营销活动,灾难开始了:一方面需要以并不确定的研发周期支持各种运营活动(运营时间不等人,必须快速写快速发),一方面是运营活动带来大量客户,与客户相关的流程也陷入频繁修改发布的过程。此外支持各种终端需求也集中爆发,需要web侧快速跟进上线。当然,还有一个东西,就是上面瀑布流程中两周发布一次的“主版本”。当这么多版本交叠在一起时,我们发现必须要引入分支来管理研发过程。于是果断切Git。

2014小结

2015年3月11日

使用PM2 Deploy部署基于Git版本管理的网站应用

2014年11月19日

按照官方介绍,PM2是一款用于生产环境Node.js应用进程管理的工具。按照民间介绍,它主要有这样几个功能:保证Node.js应用永远在线(挂掉自动重启)、自动负载均衡、零中断重启应用等。

鉴于它是如此优秀,这里还是简要介绍一下前两个功能。

安装

首先,它是一个Node.js写的工具,使用npm即可安装使用:

npm install -g pm2

运行Node.js程序

如果不使用pm2,运行Node.js程序是这样:

node xxx.js

使用pm2,是这样:

pm2 start xxx.js

监视模式

如果你正在开发Node.js应用,需要在代码变更后自动重启应用,只需要在pm2的参数中加上--watch即可:

pm2 start xxx.js --watch

推荐《蒋勋细说红楼梦》

2014年7月25日

cover

如何高效debug

2014年6月29日

cover

《幸福了吗?》简评

2014年5月14日

cover

Retina屏下的CSS雪碧图

2014年3月19日

cover

我的2013

2014年1月1日

学习ES6生成器(Generator)

2013年12月29日

这几天,TJ大神的koa框架突然在国内火起来了,随之而来的,则是其使用的ES6生成器(Generator)引起了广大码农的强烈兴趣,各种文章也如雨后春笋般拔地而起,比如这篇这篇、还有这篇。这个神奇的生成器被视为解决JS“回调恶魔金字塔”的利器。在动手实践之后,发现介绍ES6生成器的文章仍然有些疏漏,因此有了这篇文章,权当是对各位大大们的补充好了。

背景

在JS的使用场景中,异步操作的处理是一个不可回避的问题,如果不做任何抽象、组织,只是“跟着感觉走”,那么面对“按顺序发起3个ajax请求”的需求,很容易就能写出如下代码(假设已引入jQuery):

javascript
// 第1个ajax请求
$.ajax({
  url:'http://echo.113.im',
  dateType:'json',
  type:'get',
  data:{
    data:JSON.stringify({status:1,data:'hello world'}),
    type:'json',
    timeout:1000
  },
  success:function(data){
    if(data.status === 1){
      // 第2个ajax请求
      $.ajax({
        ......此处省略500字
        success:function(data){
          if(data.status === 1){
            // 第3个ajax请求
            $.ajax({
              ......此处省略500字
              success:function(data){
                if(data.status === 1){

                }
              }
            });
          }
        }
      });
    }
  }
});
// 第1个ajax请求
$.ajax({
  url:'http://echo.113.im',
  dateType:'json',
  type:'get',
  data:{
    data:JSON.stringify({status:1,data:'hello world'}),
    type:'json',
    timeout:1000
  },
  success:function(data){
    if(data.status === 1){
      // 第2个ajax请求
      $.ajax({
        ......此处省略500字
        success:function(data){
          if(data.status === 1){
            // 第3个ajax请求
            $.ajax({
              ......此处省略500字
              success:function(data){
                if(data.status === 1){

                }
              }
            });
          }
        }
      });
    }
  }
});

当顺序执行的异步操作越来越多的时候,回调层级也就越多,这也就是传说中的“回调恶魔金字塔”。

《迟到的间隔年》

2013年12月2日

cover

【科普文】有关文件格式

2013年11月26日

cover