Living a Simple Life is a Happy Life

有饭吃,自由自在,就非常开心

慢慢学着理解好的产品是什么

| Comments

从很久很久之前,我就不是很在意技术细节了。

当年还四处走矿山的时候,我看到有人还在用一个很高级的电脑跑DOS的时候,震惊了。当时那个负责人说,有个矿压软件一直跑在DOS里,习惯了。就这么用下来了。

互联网的产品之冠,在我看来,一直是hao123.com

但是那时候只是停留在意识层次,最近痛下决心,慢慢学习,试图理解什么是好的产品,好的产品是怎么成就的。

  • 好产品满足人的 贪懒嗔痴,就这个理论来看,我一直坚定不移的抱持一个观点,互联网的篮下,是色情流量。

  • 好产品不是设计出来的,是慢慢生长起来的

  • 成功的产品初期,应该只有一个功能

  • 成功产品,slogan一句话就说明白

  • 面向场景来做设计而非功能列表

  • 好产品会召唤用户,如果没有自然增长就不必推广

听了一堂产品经理培训,问了几个问题,记录一下

  • [问题]王老师你好,我是一个程序员。虽然工作方面是后台开发,但也懂一点前台,前一段时间自学Android,开发了一个小游戏。但是总觉得有道坎,不能达到那种专业的产品水准。早期我理想中的好的产品草根典型,是hao123.com。我也一直往这方面去学习,但考虑实际的用户场景时总是感觉磕磕绊绊,比如我现在在写一个经营微信公众号的工具类网站,对于需求、取舍考虑很多,也反复改了几版,总是觉得不是那种“就是它了”的程度。请问怎么继续学习提高呢?

  • 解答: 实现为主,快速上线,反复迭代,等用户吐槽。

  • [问题]王老师,如果你的团队这个sprint的任务都排满了。这个时候boss过来要强加功能,你一番权衡之后觉得还是放在下个sprint为好。怎么和boss沟通呢?谢谢。

  • 解答:搞清楚BOSS的目的,协调、沟通,解决。切忌直接反对。

  • [问题]王老师,请问网易的WEB产品经理懂CSS、JS等前端知识吗?关注诸如nodejs、React等新知识吗?能有独立开发一个小网站的能力吗?能熟悉Linux常用操作吗?你认为产品经理需要有这些技能吗?

  • 解答:需要。学无止境。

Udp Packet Receive Errors

| Comments

Issue

netstat -s output shows high number of Udp: packet receive errors

Getting high number of UDP packet drops or loss

SNMP trap issue :- SNMP trap seems to be fluctuating on my RHEL server.

Resolution

Udp: packet receive errors is increased for the following reasons:

  • Not enough socket buffer space

  • UDP checksum failure

  • UDP length mismatch

  • IPSec Security Policy failure

Diagnostic Steps

Gather statistics

Run the command netstat -nsu and see the Udp: section:

netstat -su

Udp:
    559933412 packets received
    71 packets to unknown port received.
    33861296 packet receive errors    <---- HERE
    7516291 packets sent
Socket buffer checking:

The current system-wide default socket buffer size can be determined with the commands:

sysctl net.core.rmem_max
sysctl net.core.rmem_default

This can be confirmed by watching socket statistics whilst packet receive errors is growing by running ss -nump at regular intervals, for example:

while true; do ss -nump; sleep 1; done

This will produce output as follows:

State    Recv-Q Send-Q    Local Address:Port      Peer Address:Port
ESTAB    0      0           192.168.0.2:4500       192.168.0.1:4500
users:(("processname",pid=1234,fd=3))
        skmem:(r0,rb212992,t0,tb212992,f4096,w0,o0,bl0)

If the Recv-Q statistic is regularly growing large, such as approading the system-wide rmem_max, then increase the socket buffer size.

Note this means the application is not receiving from the buffer fast enough. It may be necessary to reconfigure or redesign the application to perform better.

Conclusion

The statistic Udp: packet receive errors is reporting the SNMP MIB called UDP_MIB_INERRORS.

Commands

  • run udp server

      nc -4 -u -l 2389
    
  • cli to server

      echo -n "hello" | nc -u x.x.x.x 2389
    

Extend Lvm in vCenter

| Comments

如何在vCenter上LVM分区扩容

  • 导入镜像后,编辑虚拟机,增加第二块硬盘

  • 这个时候我们执行下面命令就可以看到新加的磁盘

      ls -alh /dev/sdb
    
  • 使用fdisk 创建lvm分区,方法和创建普通分区的方法一致,然后lvm的分区类型是8e

  • 执行下面的命令看看效果,现在/dev/sdb1 已经是linux LVM类型的分区了

      fdisk -l
    
  • 创建PV

      pvcreate /dev/sdb1
      pvdisplay
    
  • 把PV加入VG中

      vgdisplay
      vgextend centos /dev/sdb1
    
  • 扩容LV

      lvdisplay
      lvextend -L 150G  /dev/centos/opt
      xfs_growfs /dev/centos/opt
    
  • df -h看一下,打完收工

  • 如果再不够,可以加第三块盘,同样的操作

海淘和跨境电商ABC

| Comments

补习了一下海淘和跨境电商的一些基本知识。

首先海淘和跨境电商不是同一个概念,两者的区别在于,海淘除了跨境模式正规申报进境外,还有“海外代购”和“境外购买后通过转运入境”两种情况。

按照时间顺序来一遍行业发展史吧

2013年10月1日之前

这是蛮荒时代,海外代购商品与在境外电商平台购买后通过转运公司运至国内的商品,大多是通过包裹邮递渠道进境,与通过跨境申报进境的商品一样,都以参照物品征收“行邮税”,这意味着通过跨境电商模式进境的商品,被当作物品来征管。

相比较“货物”的诸多税费,“物品”享受行邮税的低税率优惠政策。就像淘宝刚开始因为没有税费而迅猛发展一样,各路海外代购买手或平台纷纷发展迅猛。

此时,海淘就是行邮模式。没有跨境电商这个概念。

2013年10月1日之后

国务院办公厅转发商务部《关于适时支持跨境电子商务零售出口的有关政策的意见》后,电子商务通关服务试点率先在上海、重庆、杭州和宁波等五城市开展,此时除了蛮荒时代的海淘之外,正规军又有了两种模式:跨境零售进口直邮模式、跨境零售进口保税备货模式。

  • 跨境零售进口直邮模式:

国内消费者在电商网站购买境外商品,由电商海外仓库直接发送包裹,邮寄给国内消费者。

  • 跨境零售进口保税备货模式

电商企业从境外直接采购货物,运送至国内海关保税区内备货,国内消费者从其网站购买商品后,电商直接从海关特殊监管区域发货,送达消费者。

这两大模式不同于海外代购,跨境商品需要电商企业向海关系统发送“物流信息”,“订单信息”和“支付信息”,同时进行清单申报。此时的货物都按照物品实行的行邮税来征税,而行邮税是将关税、增值税、消费税合并在一起征收,远低于一般贸易商品需征收的税额。

此时的市场如下:

  • 海淘模式

一批朋友圈个人买手,或者个人消费者美亚或亚马逊,这是散户。他们一般走转运,渠道有阳光和非阳光,征税看天命,价格优势明显。 然后洋码头和天猫国际做的是散户平台C2C,有点像海淘版的淘宝,物流和服务上有所保障。

  • 跨境零售进口直邮模式

玩这个的一般是天猫或者京东B2C的入驻商家。这个成本太高,所以一般主打个性化的牌。

  • 跨境零售进口保税备货模式

这个模式就是跨境电商的主流了,既有B2C,又有B2B,可以说这几年享尽了政策红利,所以基本上有钱的主一拥而上。现在有点名号的估计都在保税区占着个仓库。

2016年4月8日之后

这么挣钱实在太爽了,而且有偷税之嫌,肯定有人眼红啦。所以当当当当,4月8日实施了一个跨境电商税收政策,这个政策比较细,内容比较多,可以直接去看知乎:

https://www.zhihu.com/question/41749303

总之就是,行邮税提升,保税区里面的货要征收关税、增值税和消费税。

这么看,其实对大佬来说没多大影响,他们之前本来就正规交税,无非是为了行业规范出点买路钱,肉痛一点,但还是比一般贸易商品征税爽啊。

散户的影响不好说,要看你的主力购买什么东西,可能有升有降,而且还有走灰色渠道进来的,可能还是个利好,因为正规一点的对手成本增加了。

但是…..这个政策绝对是一拨人拍了脑袋,最后没有一个人全盘想明白,就出来的,因为….4月7日,财政部、发展改革委、工业和信息化部、农业部、商务部、海关总署、国家税务总局、质检总局、食品药品监管总局、濒管办、密码局等11个部门共同公布了《跨境电子商务零售进口商品清单》。

看到这么多人共同出的一个东西,相信对中国政策有点了解的人都会打哆嗦。

这个清单里很多东西都要证明和各种检疫报告之类的东西–>这些证明的取得不是一年半载就能有的—>然后你懂的….

相信很多保税区现在已经是人迹寥落了,相信很多大佬都在开会拍脑袋了…….

这份清单对于 跨境零售进口保税备货模式的人来说,真乃核打击。

对于散户和个人买手来说,赶紧去发掘灰色渠道,有笔快钱能挣。

对于洋码头这种走C2C的模式来说,影响肯定有,但是不好说有多大。

对于跨境电商和海淘业务的一点YY

下面的内容纯属一个码农的YY

  • 跨境电商实际上是对传统外贸模式的一种颠覆。首先,既得利益团体不会内部革命,所以跨境电商是农村包围城市之计

  • 中国的电商业务其实已经笑傲全球了,可能不论是技术上、业务模式创新上,绝对全球领先

  • 和早期国内做电子商务不同,那个时候没有人看好,只有两三家,现在的跨境电商是军阀割据,什么招都有,什么B2B,B2C,C2C, O2O,平台入驻的,微博营销的,微信朋友圈的,走正路的,走歪路的,反正是沸沸扬扬

  • 国家一方面不希望传统的一般贸易被冲击,又想释放国内的消费能力多征点税,种种纠结之下,估计会政令频发,调整频繁

  • 总之,这绝对是个风口,至于是上风口还是下风口,得看天时地利人和,缺一不可

  • 挑战与机遇并存啦,可能玩的就是心跳,也可能过把瘾就死

从一个码农的角度看业务支撑

  • 这种环境可说是乱花迷人眼,由于政策变化,一年之内战略改个三五次都有可能,估计各家就是要拼运营,拼后台支撑了

  • 哪种组合能挣钱,估计一个脑子想不明白了。我觉得得有一张大表,每种模式,每个 case都画出来,然后隔一个周就填一遍所有流程的成本,看看行业变化是什么

  • 这个行当这是有点像改革开发初期搞外贸啊……….

Open vSwitch Bridge and NetworkNameSpace Command Cheat

| Comments

  • 启动

      service openvswitch start
    
  • 创建网桥

      ovs-vsctl add-br br0
      ifconfig br0 up
    
  • 显示所有网桥

      ovs-vsctl show
    
  • 删除网桥

      ovs-vsctl del-br br0
    
  • 增加端口

      ovs-vsctl add-port br0 eth0
    
  • 设置网卡为none

      dhclient br0
    
  • 用 Namespace 模拟两台虚拟机网络

      p netns add network1
      ip netns add network2
    
  • 创建两个虚拟网卡并加入网桥

      ovs-vsctl add-port br0 vport1 -- set interface vport1 type=internal
      ovs-vsctl add-port br0 vport2 -- set interface vport2 type=internal
      tunctl -p -t vport1
      tunctl -p -t vport2
    
  • 两个虚拟网卡接入namespace

      ip link set vport1 netns network1
      ip link set vport2 netns network2
    
  • 设置虚拟网卡的IP

      ip netns exec network1 ifconfig vport1 192.168.0.1/24 up
      ip netns exec network2 ifconfig vport2 192.168.0.2/24 up
    
  • 两个namsespace PING

      ip netns exec network1 ping 192.168.0.2
      ip netns exec network2 tcpdump -i vport2
    
  • 两个namsespace NC传输

      ip netns exec network2 nc -l 1234
      ip netns exec network2 tcpdump -i vport2
      ip netns exec network1 nc 192.168.0.2 1234
    
  • 显示vlan信息

      ovs-appctl fdb/show br0
    
  • 显示openflow信息

      ovs-ofctl show br0
    
  • 显示流表信息

      ovs-ofctl dump-flows br0
    
  • 显示网桥详细信息

      ovs-vsctl list Bridge
    
  • 显示端口详细信息

      ovs-vsctl list Port
    
  • 显示接口详细信息

      ovs-vsctl list Interface
    

Webtorrent Redefine CDN?

| Comments

最近发现了一个开源的JS东东,webtorrent:

https://github.com/feross/webtorrent

用webRTC实现了一个浏览器端的bt客户端。

这个点子我还在几年前试过呢?当时想用socketio来做,但各种限制,当时webRTC还是个小众,没有被浏览器主流实现。

试了一下,效果还差强人意。

脑洞开一下,话说这会不会是快播们的春天来了。

严肃一点再想想,是不是CDN提供商们可以利用它分担压力,提升速度,走上人生巅峰….

留待后续观察。

有关于云计算及SDN

| Comments

云计算和SDN这两个名词总是被许多人挂在嘴边,他们给人的印象就是在Qcon大会上念PPT的一拨人。

作为一个实用党,下面我企图用一问一答的形式来瞎扯一番:

Q: 我是个中小企业,用openstack好还是vCenter虚拟化好?

A: 如果你能招到一个合适的人(注意,这个概率我觉得是万分之一),你可以上openstack。

如果你有足够的M,上vCenter。

如果你什么都没有,上阿里云 (我是认真的,不要黑我)。

总之,随着网络带宽提升,我觉得中小企业自建运维越来越不划算。云化是趋势。

Q: 容器技术会颠覆现有的虚拟化技术吗?

A: 不会,容器技术只是补充,全虚拟化有自己不可替代优势。

Q: SDN会替代现在的网络设备吗?

A: 可能会替代大部分网络交换设备。但是就现在的情况来看,各种SDN解决方案的性能还没有和硬件处在同一档次上。

所以将来在大型数据中心,肯定是软硬结合和持续很长一段时间。

在很多中小云平台,大部分硬件设备已经在迁移过程中了。

Q: SDN真的比传统设备灵活吗?简单吗?方便吗?

A: 首先要看方案,和传统网络一样,不同的场景实施方案也不一样。一千个现场会有一千个云实施方案。

SDN有灵活性的优势。

SDN某种意义上说,比传统网络还要复杂。

首先,真实世界的网络就是复杂的。任何隐藏复杂性的尝试都会增加复杂性。所以SDN不能拯救世界,传统硬件设备面临的复杂问题,它也一样要面对。

SDN的优势就是灵活,并非简单。

Q: 未来从事中小企业云的部署咨询工作,有戏吗?

A: 我觉得单纯做部署顾问之类的没戏。做openstack的番茄花园有戏。

如果将来GPU虚拟化成熟的话,做打金工作室的openstack 包装发行版相当有戏。

Q: SDN领域有何机会?

A: 也许SDN领域将来不会再孕育思科华为那样的大玩家,但是一定会有许多独角兽出来。

目前看到的看准一个痛点,比如苏州盛科那样,软硬结合,做芯片,交换机白牌供应商,很有机会。

或者瞅准市场空白,比如说做性能比较低的软tap,我觉得很有戏。

Is Craig Wright Real Satoshi Nakamoto?

| Comments

Craig Wright 又在声明他是”中本聪”了.

“中本聪”给出的签名是:

MEUCIQDBKn1Uly8m0UyzETObUSL4wYdBfd4ejvtoQfVcNCIK4AIgZmMsXNQWHvo6KDd2Tu6euEl13VTC3ihl6XUlhcU+fM4=

我们先对信息串进行base64解码,再转换成hex是:

3045022100c12a7d54972f26d14cb311339b5122f8c187417dde1e8efb6841f55c34220ae0022066632c5cd4161efa3a2837764eee9eb84975dd54c2de2865e9752585c53e7cce

很遗憾,我们可以在交易ID:

828ef3b079f9c23829c56fe86e85b4a69d9e06e5b54ea597eef5fb3ffef509fe

中找出这个签名。可通过:

https://blockchain.info/tx/828ef3b079f9c23829c56fe86e85b4a69d9e06e5b54ea597eef5fb3ffef509fe?format=hex

找到十六进制串的交易内容

然后搜索一下hex样子的签名,遗憾地发现,能在这个交易中找到这个签名。

但是令人疑惑的是GAVIN ANDRESEN为这位”中本聪”背书:

http://gavinandresen.ninja/satoshi

Gavin不是一个无的放矢的人,他肯定是见到了更多的证据.

但是Craig Wright 又不对其他给定的文本签名来证明自己是中本聪,反而老是用这种神神遭遭的签名来忽悠大家……

卫平布莱恩特老师说,这球有意思啊…….

最后, 如果Craig Wright这个人是为了某种目的假冒的话,只能说他真是煞费苦心啊. 我不认为一个签名造假如此low的家伙能有这种能力.

但是他的一些行为如果算恶作剧的话,又未免太高段了,参考这里:

https://www.zhihu.com/question/22199390/answer/76083139

不负责任的YY一下, Craig Wright肯定和真正的中本聪有某种关系,他在bitcoin诞生之初就了解参与过.

他不是bitcoin的发明者,因为种种迹象表明,他的技术能力实在太low了.

真正的中本聪可能是他的那个朋友:David Kleiman, 但他已经死了.

呵呵, 绝佳的侦探小说体裁啊.

Git Cheat 2

| Comments

整理一下经常忘记的Git命令 (版本v2)

http://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html?utm_source=tool.lu

新建代码库

# 在当前目录新建一个Git代码库
git init

# 新建一个目录,将其初始化为Git代码库
git init [project-name]

# 下载一个项目和它的整个代码历史
git clone [url]

配置

Git的设置文件为.gitconfig,它可以在用户主目录下(全局配置),也可以在项目目录下(项目配置)。

# 显示当前的Git配置
git config --list

# 编辑Git配置文件
git config -e [--global]

# 设置提交代码时的用户信息
git config [--global] user.name "[name]"
git config [--global] user.email "[email address]"

增加/删除文件

# 添加指定文件到暂存区
git add [file1] [file2] ...

# 添加指定目录到暂存区,包括子目录
git add [dir]

# 添加当前目录的所有文件到暂存区
git add .

# 删除工作区文件,并且将这次删除放入暂存区
git rm [file1] [file2] ...

# 停止追踪指定文件,但该文件会保留在工作区
git rm --cached [file]

# 改名文件,并且将这个改名放入暂存区
git mv [file-original] [file-renamed]

代码提交

# 提交暂存区到仓库区
git commit -m [message]

# 提交暂存区的指定文件到仓库区
git commit [file1] [file2] ... -m [message]

# 提交工作区自上次commit之后的变化,直接到仓库区
git commit -a

# 提交时显示所有diff信息
git commit -v

# 使用一次新的commit,替代上一次提交
# 如果代码没有任何新变化,则用来改写上一次commit的提交信息
git commit --amend -m [message]

# 重做上一次commit,并包括指定文件的新变化
git commit --amend [file1] [file2] ...

分支

# 列出所有本地分支
git branch

# 克隆并在本地建立所有分支

for branch in `git branch -a | grep remotes | grep -v HEAD | grep -v master`; do
    git branch --track ${branch##*/} $branch
done

# 列出所有远程分支
git branch -r

# 列出所有本地分支和远程分支
git branch -a

# 新建一个分支,但依然停留在当前分支
git branch [branch-name]

# 新建一个分支,并切换到该分支
git checkout -b [branch]

# 新建一个分支,指向指定commit
git branch [branch] [commit]

# 新建一个分支,与指定的远程分支建立追踪关系
git branch --track [branch] [remote-branch]

# 切换到指定分支,并更新工作区
git checkout [branch-name]

# 建立追踪关系,在现有分支与指定的远程分支之间
git branch --set-upstream [branch] [remote-branch]

# 合并指定分支到当前分支
git merge [branch]

# 选择一个commit,合并进当前分支
git cherry-pick [commit]

# 删除分支
git branch -d [branch-name]

# 删除远程分支
git push origin --delete [branch-name]

# 删除不存在对应远程分支的本地分支
# 假设这样一种情况:
#    1. 我创建了本地分支b1并push到远程分支 origin/b1;
#    2. 其他人在本地使用fetch或pull创建了本地的b1分支;
#    3. 我删除了 origin/b1 远程分支;
#    4. 其他人再次执行fetch或者pull并不会删除这个他们本地的 b1 分支,运行 git branch -a 也不能看出这个branch被删除了,如何处理?

# 在fetch之后删除掉没有与远程分支对应的本地分支
git fetch -p                                                        //

# 重命名远程分支
# 在git中重命名远程分支,其实就是先删除远程分支,然后重命名本地分支,再重新提交一个远程分支
git push --delete origin devel
git branch -m devel develop
git push origin develop

# 合并branchB到branchA
# 前提是你需要的是fast-forward
# 合并本地的branchB到本地的branchA
git fetch . branchB:branchA

# 合并远端的branchB到本地的branchA
git fetch origin branchB:branchA


# 合并branch上的指定文件
# branches/A 上修改了一个文件A.h,新增了一个文件B.h,删除了一个文件C.h。
# 首先切换到master分支
git checkout master
# 不切换branch,把RemLanbranches/A上的A.h更新到当前分支
git checkout -p branches/A A.h
# 去掉-p参数,新增该B.h文件
git checkout branches/A B.h
# 删除文件目前还没找到其他办法,但效果是一样的
rm C.h

标签

# 列出所有tag
git tag

# 新建一个tag在当前commit
git tag [tag]

# 新建一个tag在指定commit
git tag [tag] [commit]

# 删除本地tag
git tag -d [tag]

# 删除远程tag
git push origin :refs/tags/[tagName]

# 查看tag信息
git show [tag]

# 提交指定tag
git push [remote] [tag]

# 提交所有tag
git push [remote] --tags

# 新建一个分支,指向某个tag
git checkout -b [branch] [tag]

查看信息

# 显示有变更的文件
git status

# 显示当前分支的版本历史
git log

# 显示commit历史,以及每次commit发生变更的文件
git log --stat

# 显示某个commit之后的所有变动,每个commit占据一行
git log [tag] HEAD --pretty=format:%s

# 显示某个commit之后的所有变动,其"提交说明"必须符合搜索条件
git log [tag] HEAD --grep feature

# 显示某个文件的版本历史,包括文件改名
git log --follow [file]
git whatchanged [file]

# 显示指定文件相关的每一次diff
git log -p [file]

# 显示指定文件是什么人在什么时间修改过
git blame [file]

# 显示暂存区和工作区的差异
git diff

# 显示暂存区和上一个commit的差异
git diff --cached [file]

# 显示工作区与当前分支最新commit之间的差异
git diff HEAD

# 显示两次提交之间的差异
git diff [first-branch]...[second-branch]

# 显示某次提交的元数据和内容变化
git show [commit]

# 显示某次提交发生变化的文件
git show --name-only [commit]

# 显示某次提交时,某个文件的内容
git show [commit]:[filename]

# 显示当前分支的最近几次提交
git reflog

远程同步

# 下载远程仓库的所有变动
$ git fetch [remote]

# 显示所有远程仓库
$ git remote -v

# 显示某个远程仓库的信息
$ git remote show [remote]

# 增加一个新的远程仓库,并命名
$ git remote add [shortname] [url]

# 取回远程仓库的变化,并与本地分支合并
$ git pull [remote] [branch]

# 上传本地指定分支到远程仓库
$ git push [remote] [branch]

# 强行推送当前分支到远程仓库,即使有冲突
$ git push [remote] --force

# 推送所有分支到远程仓库
$ git push [remote] --all

撤销

# 恢复暂存区的指定文件到工作区
git checkout [file]

# 恢复某个commit的指定文件到暂存区和工作区
git checkout [commit] [file]

# 恢复暂存区的所有文件到工作区
git checkout .

# 重置暂存区的指定文件,与上一次commit保持一致,但工作区不变
git reset [file]

# 重置暂存区与工作区,与上一次commit保持一致
git reset --hard

# 重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变
git reset [commit]

# 重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致
git reset --hard [commit]

# 重置当前HEAD为指定commit,但保持暂存区和工作区不变
git reset --keep [commit]

# 新建一个commit,用来撤销指定commit
# 后者的所有变化都将被前者抵消,并且应用到当前分支
git revert [commit]

remote 同步

# 查看当前远程版本库
git remote -v

#添加原始版本库
git remote add cocos2d-x git://github.com/cocos2d/cocos2d-x.git

#获取原始版本库的更新
git fetch cocos2d-x

# 合并原始版本库的代码到当前版本库中,合并前确保当前分支是master
git merge cocos2d-x/master

分支的衍合

http://git-scm.com/docs/git-rebase

diff

# 只显示两个分支间的差异,如果你想找出‘master’,‘test’的共有 父分支和'test'分支之间的差异,你用3个‘.'来取代前面的两个'.' 。
git diff master..test

# 显示你当前的索引和上次提交间的差异;这些内容在不带"-a"参数运行 "git commit"命令时就会被提交。
git diff --cached

# 显示你工作目录与上次提交时之间的所有差别,这条命令所显示的 内容都会在执行"git commit -a"命令时被提交。
git diff HEAD

# 如果你要查看当前的工作目录与另外一个分支的差别,你可以用下面的命令执行:
#这会显示你当前工作目录与另外一个叫'test'分支的差别。你也以加上路径限定符,来只 比较某一个文件或目录。
git diff test

# 显示你当前工作目录下的lib目录与上次提交之间的差别(或者更准确的 说是在当前分支)。
git diff HEAD -- ./lib

# 如果不是查看每个文件的详细差别,而是统计一下有哪些文件被改动,有多少行被改 动,就可以使用‘--stat' 参数。
git diff --stat

# 显示两次更改之间所有的文件名
git diff-tree -r --no-commit-id --name-only --diff-filter=ACMRTD HEAD HEAD^

# diff两个分支
git diff master branch/1.1 --

其他

# 生成一个可供发布的压缩包
git archive

# 临时保存/恢复现在的状态
git stash
git stash pop

# svn log -v 类似效果
git log --name-status