自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(43)
  • 资源 (2)
  • 收藏
  • 关注

原创 hive 参数调优手册

hive执行过程1. reduce 个数设置方法1.调整hive.exec.reducers.bytes.per.reducer和hive.exec.reducers.maxhive.exec.reducers.bytes.per.reducer(每个reduce任务处理的数据量,默认为1G)hive.exec.reducers.max(每个任务最大的reduc...

2019-11-17 16:42:21 502

原创 flink为什么这么火

在实时计算里,最出名的是几个框架应该就是spark streaming 、storm和flink ,最近两年各大互联网大厂纷纷切到flink,为什么?为什么这么火?一个表格告诉你!1.在模型上,storm 和 flink 都是实时流,来一条处理一条,而spark streaming 是一个微批次处理,数据流被切分成一个个小的批次,一般单位是秒级。2.在功能上,flink 支持事件时间(ev...

2021-03-30 22:09:49 277

原创 hdfs读写过程是怎样的?

1.文件读取过程 1.客户端通过调用FileSyste 对象的open()方法来打开希望读取的文件,对于Hdfs来说,这个对象是DistributedFileSystem的一个实例,2.通过使用远程过程调用(RPC)来调用namenode,以确定文件起始块的位置,对于每个块,namenode返回存有该块副本的datanode的地址,并且datanode根据他们与...

2021-01-12 21:46:10 191

原创 Yarn是个什么玩意

Yarn是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式的操作系统平台,而mapreduce等运算程序则相当于运行于操作系统之上的应用程序。 在hadoop1.0中有一些弊端,比如hdfs元数据信息保存的单节点故障,并且任务计算框架只能使用mapreduce,而且造成了任务管理器的压力过大,因此在hadoop2.0中加入了yarn资源统一管理的机制,不仅解...

2021-01-12 21:45:01 467

原创 十万个为什么(hadoop 1期)?

纳尼?纳尼?纳尼?1.什么是map的数据本地化优化?Hadoop 在存储有输入数据(hdfs中的数据)的节点上运行map任务,可以获得最佳性能,因为他无需使用宝贵的集群带宽资源。这就是所谓的数据本地化优化,但是有时对于一个map任务的输入分片来说,存储该分片的hdfs数据块副本的所有节点可能正在运行其他map任务,此时作业调度需要从某一数据块所在的机架中的一个节点上寻找一个空闲的map槽(...

2020-11-01 11:43:05 137

原创 小伙子,你知道缓慢变化维有多少种处理方法吗?

什么是缓慢变化维?缓慢变化维有多少种处理方法?缓慢变化维,即同一维表中属性随时间发生变化,那对于这种变化的维度,在数据仓库建设时有多少种处理方法咧~一、基础型0.原样保留维度属性不会发生变化,保留原值。这种适合属性标记为‘原型’的的情况,像用户的身份证号,商品的上架时间等1.重写属性值被新值覆盖。这种情况只反映最近的工作,易实现,但破坏了历史情况,需小心使用2.增加新行在维度表中增加...

2020-07-18 21:51:25 443

原创 Doris调研学习

简介:Doris(原百度 Palo)是一款基于大规模并行处理技术的分布式 SQL 数据库,由百度在 2017 年开源,2018 年 8 月进入Apache 孵化器。定位:MPP 架构的关系型分析数据库PB 级别大数据集,秒级 / 毫秒级查询主要用于多维分析和报表查询2018 年进入 Apache 孵化器架构:Doris 的架构很简洁,只设 F...

2020-05-13 19:42:21 810

原创 数据仓库日期维表怎么做

最近终于有点时间了,东拼西凑的设计了一个日期维表,也是数仓设计时比较常用的。表结构如下:dt string COMMENT '日历日期',lunar_dt string COMMENT '农历日期',calendar_year int COMMENT '日历年',quarter_of_year int COMMENT '季度',month_of_year int COM...

2020-04-16 14:32:47 3464 2

原创 Map Reduce执行过程

Map Reduce 执行过程是数仓hql调优所必须熟知的,也是初高级数仓工程师面试基本必问的一块内容,所以为了面包,巩固学习一下。 Map Reduce 执行过程:map阶段 ---> shuffle阶段 ---> reduce阶段 map阶段 1.分片读取...

2020-03-18 11:09:41 1226

原创 算法修炼

冒泡与快排(更新中)冒泡排序快速排序import java.util.Arrays;public class SortFun { public void bubbleSort(int[] arr){ int n = arr.length; if(n<=1){ return ...

2020-01-14 09:39:40 127

原创 hive谓词下放

保留表(Preserved Row table)在outer join中需要返回所有数据的表叫做保留表,也就是说在left outer join中,左表需要返回所有数据,则左表是保留表;right outer join中右表则是保留表;在full outer join中左表和右表都要返回所有数据,则左右表都是保留表。Null Supplying table在outer ...

2020-01-04 11:51:36 174

原创 hive连续登录问题

现在有一张用户消费信息表,求问连续三天登录用户有多少个,用户连续交易的总额、连续登陆天数、连续登陆开始和结束时间、间隔天数:user_id bigint comment '广告主id',daystr comment '日期'price decimal(10,2) comment '消费金额'数据预处理:create table user_log_test (user_...

2020-01-03 15:26:39 1127 2

原创 hive窗口函数使用

hive窗口函数基本面试面sql必考项目,这里画一下重点猴,那现在就操练起来~窗口函数格式:function_name(field) over (partition by field order by field rows between unbounded preceding and current row)窗口说明:n PRECEDING:往前n行数据n FOLL...

2019-12-25 00:01:59 123

原创 数仓基础入门-10-实践篇

有不少没涉及过数仓的同学问我一些比较基础的问题,为了更好的理解前面讲到的一些理论,写一个小小的demo体会一下~~我们要构建一个订单主题,构建订单明细,订单sku,订单粒度三张表。(假设我们只有一个数据域,单纯的为了举个例子,有一个大概的理解)模型设计及概念可阅读《数仓基础入门》系列历史文章,三言两语就打发了,具体深意自己体会~????ods层表日志表:ods_order_det...

2019-12-10 23:20:48 277

原创 数仓入门基础-9-缓慢变化维

缓慢变化维的提出是因为维度的属性并不是静态的,他会随着时间线延长发生缓慢的变化。常用的三种处理方式:1.重写维度值,不保留历史,始终取最新数据。2.插入新的维度行,历史事实数据与历史维度关联,新的事实数据与新的维度关联。3.插入新的维度列。举个????:有一个商店店铺,20191101类目是A,20191102更改为B。商店id类目其他属性日期100...

2019-12-02 23:30:33 173

原创 空字段引发的惨案

惨案经过:有一张效果广告的表tmp_xiaoguo_table,有字段 dt 日期,order_id 订单,ocpx_stage ocpx阶段(ocpx单子才有),price金额。dt string "日期"order_id bigint "订单id"ocpx_stage tinyint "ocpx阶段 "price decimal(28,2) "金额"数据...

2019-11-30 15:18:38 75

原创 号外号外!公众号开通了!!!

最近发现自己越来越懒了,好久没更新博客了,为了更好的可持续的监督自己学习,沉淀,我开通了公众号,保持每周至少更新一篇,立帖为证!!!另外公众号会定期分享一些免费视频与书籍,以供大家参考学习。本次分享的是廖雪峰 【大数据分析全栈工程师】视频课程(据说价值8000RMB),费了牛劲才搞到的,不要问我咋弄到的????,关注公众号,回复【资源】即可获得相关链接吼~1...

2019-11-28 00:00:35 162

原创 2019-11-20 shell学习

删除目录下固定大小的文件find . -name "*" -type f -size 0c | xargs -n 1 rm -f## 删除目录下大小为0 的文件循环查询hive表分区目录下文件个数#!/bin/sh#开始时间-yyyy-mm-dd Hbegin="2019-11-20 00:00:00"end=""2019-11-20 23:00:00""hive...

2019-11-20 23:13:21 99

原创 数仓入门基础-2-技术栈

1.hive sql >> 五星在大多数的工作中,主要用的语言就是sql,说难不难,只要做的多了,基本就可以融会贯通,当然也要了解 hive ,清楚常运用到的优化方法。推荐书籍:《hive权威指南》技能点:-1.常用的sql 查询语句,select where sum group order常用sql语句,row_number()over等窗口函数使用,ma...

2019-09-20 23:42:33 691

原创 数仓入门基础-8-模型设计

1.事实表模型设计事实表有三种类型 : 事务事实表、周期快照事实表和累积快照事实表。事务事实表用来描述业务过程,眼踪空间或时间上某点的度量事件,保存的是最原子的数据,也称为“原子事实表“;周期快照事实表以具有规律性的、可预见的时间间隔记录事实 ,时间间隔如每 天、每月、每年等;累积快照事实表用来表述过程开始和结束之间的关键步骤事件 ,覆盖过...

2019-09-17 23:49:00 377

原创 2.2正态分布检测

# -*- encoding: utf-8 -*-import sysimport numpy as npimport pandas as pdfrom scipy import stats as stsimport matplotlib.pyplot as pltimport matplotlib as mplif __name__ == "__main__":...

2019-08-27 14:36:25 234

原创 品牌广告、效果广告、RTB

品牌广告,以树立产品品牌形象,提高品牌的市场占有率为直接目的,突出传播品牌在消费者心中确定位置的一种方式,比如像瓜子二手车的视频广告,直接给消费者洗脑,让消费者在想买二手车的时候,第一时间想到这个平台。特点:长久慢  1.为塑造品牌服务是广告最主要的目标。广告就是要力图使品牌具有并且维持一个高知名度的品牌形象。  2.任何一个广告都是对品牌的长程投资...

2019-08-23 13:28:00 1230

原创 2.1概率分布

一、基本概念随机变量古典概率条件概率离散变量连续变量期望值二、离散变量概率分布二项分布伯努利分布泊松分布三、连续变量概率分布均匀分布正态分布指数分布伽玛分布偏态分布贝塔分布威布尔分布卡方分布F分布 ...

2019-07-25 12:54:00 123

原创 数仓入门基础-6-数仓规范

数仓规范,看似是无关紧要,实则是数仓实施最重要要素,也是衡量数仓标准的重要条件,有了规范,才能尽可能避免一些坑。1.模型分层数仓入门基础-5-数仓建模2.表命名规范ods层:数据引入层日志类非结构化表:ods_[数据域]_ [自定义内容]_ [刷新频率]业务库结构化同步表:ods_[数据域]_ [业务库名]_ [表名]_[刷新频率]dwd层:...

2019-07-24 00:48:00 1268

原创 1.4python实现描述性统计

# -*- encoding: utf-8 -*-import sysimport numpy as npimport pandas as pdfrom scipy import stats as stsif __name__ == "__main__": print("=========描述性统计学习========\n") ...

2019-07-23 21:09:00 101

原创 1.3 描述性统计-分布的形状

1.偏态系数,以平均数和中位数之差对标准差之比率来衡量偏斜的程度。偏斜系数小于0,则平均数在众数之左,图形呈左偏,又称负偏。偏态系数大于0,平均数在众数之右,图形呈右偏,又称正偏。偏态系数公式S表示偏度;i 表示第 i个数值; 表示平均值; n是采样数量偏离图2.峰态系数,衡量离群数据离群度的指标,与随机分布的四阶中心距对应,是数据...

2019-07-19 19:46:00 2723

原创 1.2描述性统计-离散程度

方差:样本各数据与均值(数学期望)之差的平方的平均数,反映的是样本与其均值的偏离程度。公式:方差其中σ2σ2为总体方差,XX为变量,μμ为整体均值,NN为总体例数。标准差:又称均方差, 是离均差平方的算数平方根。标准差能体现一个数据集的离散程度,平均数相同的两组数,标准差未必相同。公式:标准差方差与标准差用途:方差与我们要处理的...

2019-07-16 23:26:00 6725

原创 数仓入门基础-5-数仓建模

个人博客:https://renwula.github.io/,本系列基于互联网公司数仓,使用hive搭建数仓 从业中,数仓建模是一个数仓工程师需要的必备的能力,优秀的分层设计能够让整个数据体系更易理解和使用。所以想入行数仓数仓分层是需要补一补的,才能知道分层的意义。很多人都不理解为什么分层,分层的意义是什么,分层有这么重要吗?是的就是这么重要,说一下我的理解:>1....

2019-04-22 00:01:00 6459

原创 centos7.2安装docker 报错 Requires: container-selinux >= 2.9

下列操作用root操作的,如果不是root请用sudo操作##1.检查内核uname -r查看内核是否在3.10以上3.10.0-327.36.3.el7.x86_64##2.删除旧版本的dockeryum remove docker docker-client docker-client-latest docker-common docker-latest docke...

2019-03-16 19:37:55 2619 1

原创 数据仓库入门基础-1-漫谈数仓

百度百科的定义:数据仓库,英文名称为Data Warehouse,可简写为DW或DWH。数据仓库,是为企业所有级别的决策制定过程,提供所有类型数据支持的战略集合。它是单个数据存储,出于分析性报告和决策支持目的而创建。 为需要业务智能的企业,提供指导业务流程改进、监视时间、成本、质量以及控制。数据仓库的特征在于面向主题、集成性、稳定性和时变性。从传统数仓到互联网数仓,有很多相似点也有很多不同点,...

2019-01-03 23:19:54 1608 1

原创 数仓入门基础-4-雪花模型与星型模型

个人博客:https://renwula.github.io/,本系列基于互联网公司数仓,使用hive搭建数仓星型模型与雪花模型,应该是数仓面试者最喜欢提的问题,也是比较容易理解的概念。1.星型架构是一种非正规化的结构,多维数据集的每一个维度都直接与事实表相连接,不存在渐变维度,所以数据有一定的冗余,例图如下:星型模型2.当有一个或多个维表没有...

2018-12-18 20:58:00 487

原创 数仓入门基础-3-事实表与维度表

个人博客:https://renwula.github.io/,本系列基于互联网公司数仓,使用hive搭建数仓事实表,发生在现实世界中操作型时间,其产生的可度量数值,存储在事实表中,例如交易订单表。一般有以下几种事实特性:1.可加、半可加、不可加事实 。可加,例如pv(点击量) ; 半可加,例如数值差额,uv(用户量);不可加,例如比率。2.NULL值处...

2018-12-17 23:30:00 1077

原创 hadoop学习之路3-MapReduce作业生命周期

本系列均为hadoop1版本为准。。MR作业生命周期,即用户从作业提交到运行结束经历的整个过程。如图所示:hadoop MR 作业生命周期1.作业提交与初始化。用户提交作业后,首先由JobClient实例将作业相关信息,比如将程序jar包、作业配置文件、分片元信息文件等上传到hdfs上,其中分片元信息记录了每个输入分片的逻辑位置信息。然后Job...

2018-12-05 23:18:00 324

原创 hadoop学习之路2--MapReduce架构

本系列均为hadoop1版本为准。。MapReduce 也采用了Master/Slave(M/S)架构,主要有以下组件组成:Client、JobTracker、TaskTracker和Task。Map Reduce架构图1.Client用户编写的MapReduce 程序通过Client提交到JobTracker端;同时,用户可通过Client ...

2018-11-29 00:04:00 180

原创 hadoop学习之路1--hdfs架构

hadoop学习之路1–hdfs架构本系列均为hadoop1版本为准。。HDFS是一个具有高度容错性的分布式文件系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。HDFS架构如图,总体采用master/slave架构,主要由以下几个组件组成:Client、NameNode、SecondaryNameNode和DataNode1.ClientC...

2018-11-27 22:12:32 156

原创 hadoop学习之路1--hdfs架构

本系列均为hadoop1版本为准。。HDFS是一个具有高度容错性的分布式文件系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。 HDFS架构如图,总体采用master/slave架构,主要由以下几个组件组成:Client、NameNode、SecondaryNameNode和Data...

2018-11-27 21:51:00 108

原创 数仓入门基础-2-数仓方法论

个人博客:https://renwula.github.io/,本系列基于互联网公司数仓,使用hive搭建数仓三范式(3NF): 第一范式(1NF)无重复的列。学号不能是一样的吧对不对。 第二范式(2NF)非主属性非部分依赖于主关键字。你的个人信息都对应一个学号是不是。 第三范式(3NF)属性不依赖于其它非主属性。学生信息表只能有学院的i...

2018-07-11 09:45:00 516

原创 数仓入门基础-1-漫谈数仓

个人博客:https://renwula.github.io/,本系列基于互联网公司数仓,使用hive搭建数仓百度百科的定义:数据仓库,英文名称为Data Warehouse,可简写为DW或DWH。数据仓库,是为企业所有级别的决策制定过程,提供所有类型数据支持的战略集合。它是单个数据存储,出于分析性报告和决策支持目的而创建。 为需要业务智能...

2018-07-10 20:10:00 436

原创 hive 数据优化

影响Mapper的数量 1)文件数量 2)文件大小,根据下面参数进行切割 set mapred.max.split.size=128000000影响Reducer数量 mapred.reduce.tasks(强制指定reduce的任务数量) hive.exec.reducers.bytes.per.reducer(每个reduce任务处理的数据量,默认为1000^3=

2018-01-07 23:56:49 238

原创 hive 排序函数

row_number() 是没有重复值的排序(即使两天记录相等也是不重复的),可以利用它来实现分页 dense_rank() 是连续排序,两个第二名仍然跟着第三名 rank() 是跳跃拍学,两个第二名下来就是第四名使用方法 fun() over( partition by field,field… order by flag.. asc/desc)按照分区排序,即 field…一样

2017-04-26 01:46:39 2843

GIT中文资源

1 起步 1 1.1 关于版本控制 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.1.1 本地版本控制系统 . . . . . . . . . . . . . . . . . . . . . . 1 1.1.2 集中化的版本控制系统 . . . . . . . . . . . . . . . . . . . . 1 1.1.3 分布式版本控制系统 . . . . . . . . . . . . . . . . . . . . . 2 1.2 Git 的历史 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.3 Git 基础要点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.3.1 直接快照,而非比较差异 . . . . . . . . . . . . . . . . . . . 4 1.3.2 近乎所有操作都可本地执行 . . . . . . . . . . . . . . . . . . 5 1.3.3 时刻保持数据完整性 . . . . . . . . . . . . . . . . . . . . . 5 1.3.4 多数操作仅添加数据 . . . . . . . . . . . . . . . . . . . . . 5 1.3.5 三种状态 . . . . . . . . . . . . . . . . . . . . . . . . . . 6 1.4 安装 Git . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.4.1 从源代码安装 . . . . . . . . . . . . . . . . . . . . . . . . 7 1.4.2 在 Linux 上安装 . . . . . . . . . . . . . . . . . . . . . . . 7 1.4.3 在 Mac 上安装 . . . . . . . . . . . . . . . . . . . . . . . . 8 1.4.4 在 Windows 上安装 . . . . . . . . . . . . . . . . . . . . . . 8 1.5 初次运行 Git 前的配置 . . . . . . . . . . . . . . . . . . . . . . . 9 1.5.1 用户信息 . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.5.2 文本编辑器 . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.5.3 差异分析工具 . . . . . . . . . . . . . . . . . . . . . . . . 10 1.5.4 查看配置信息 . . . . . . . . . . . . . . . . . . . . . . . . 10 1.6 获取帮助 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 1.7 小结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2 Git 基础 13 2.1 取得项目的 Git 仓库 . . . . . . . . . . . . . . . . . . . . . . . . 13 2.1.1 从当前目录初始化 . . . . . . . . . . . . . . . . . . . . . . 13 2.1.2 从现有仓库克隆 . . . . . . . . . . . . . . . . . . . . . . . 14 2.2 记录每次更新到仓库 . . . . . . . . . . . . . . . . . . . . . . . . . 14 2.2.1 检查当前文件状态 . . . . . . . . . . . . . . . . . . . . . . 14 2.2.2 跟踪新文件 . . . . . . . . . . . . . . . . . . . . . . . . . 15 2.2.3 暂存已修改文件 . . . . . . . . . . . . . . . . . . . . . . . 16 2.2.4 忽略某些文件 . . . . . . . . . . . . . . . . . . . . . . . . 17 2.2.5 查看已暂存和未暂存的更新 . . . . . . . . . . . . . . . . . . 18 2.2.6 提交更新 . . . . . . . . . . . . . . . . . . . . . . . . . . 20 iii 2.2.7 跳过使用暂存区域 . . . . . . . . . . . . . . . . . . . . . . 21 2.2.8 移除文件 . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.2.9 移动文件 . . . . . . . . . . . . . . . . . . . . . . . . . . 23 2.3 查看提交历史 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 2.3.1 限制输出长度 . . . . . . . . . . . . . . . . . . . . . . . . 28 2.3.2 使用图形化工具查阅提交历史 . . . . . . . . . . . . . . . . . 29 2.4 撤消操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 2.4.1 修改最后一次提交 . . . . . . . . . . . . . . . . . . . . . . 29 2.4.2 取消已经暂存的文件 . . . . . . . . . . . . . . . . . . . . . 30 2.4.3 取消对文件的修改 . . . . . . . . . . . . . . . . . . . . . . 31 2.5 远程仓库的使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 2.5.1 查看当前的远程库 . . . . . . . . . . . . . . . . . . . . . . 32 2.5.2 添加远程仓库 . . . . . . . . . . . . . . . . . . . . . . . . 32 2.5.3 从远程仓库抓取数据 . . . . . . . . . . . . . . . . . . . . . 33 2.5.4 推送数据到远程仓库 . . . . . . . . . . . . . . . . . . . . . 33 2.5.5 查看远程仓库信息 . . . . . . . . . . . . . . . . . . . . . . 34 2.5.6 远程仓库的删除和重命名 . . . . . . . . . . . . . . . . . . . 35 2.6 打标签 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 2.6.1 列显已有的标签 . . . . . . . . . . . . . . . . . . . . . . . 35 2.6.2 新建标签 . . . . . . . . . . . . . . . . . . . . . . . . . . 36 2.6.3 含附注的标签 . . . . . . . . . . . . . . . . . . . . . . . . 36 2.6.4 签署标签 . . . . . . . . . . . . . . . . . . . . . . . . . . 37 2.6.5 轻量级标签 . . . . . . . . . . . . . . . . . . . . . . . . . 37 2.6.6 验证标签 . . . . . . . . . . . . . . . . . . . . . . . . . . 38 2.6.7 后期加注标签 . . . . . . . . . . . . . . . . . . . . . . . . 38 2.6.8 分享标签 . . . . . . . . . . . . . . . . . . . . . . . . . . 39 2.7 技巧和窍门 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 2.7.1 自动完成 . . . . . . . . . . . . . . . . . . . . . . . . . . 40 2.7.2 Git 命令别名 . . . . . . . . . . . . . . . . . . . . . . . . 41 2.8 小结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 3 Git 分支 43 3.1 何谓分支 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 3.2 基本的分支与合并 . . . . . . . . . . . . . . . . . . . . . . . . . . 47 3.2.1 基本分支 . . . . . . . . . . . . . . . . . . . . . . . . . . 48 3.2.2 基本合并 . . . . . . . . . . . . . . . . . . . . . . . . . . 51 3.2.3 冲突的合并 . . . . . . . . . . . . . . . . . . . . . . . . . 52 3.3 分支管理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 3.4 分支式工作流程 . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 3.4.1 长期分支 . . . . . . . . . . . . . . . . . . . . . . . . . . 56 3.4.2 特性分支 . . . . . . . . . . . . . . . . . . . . . . . . . . 56 3.5 远程分支 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 3.5.1 推送 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 3.5.2 跟踪分支 . . . . . . . . . . . . . . . . . . . . . . . . . . 61 3.5.3 删除远程分支 . . . . . . . . . . . . . . . . . . . . . . . . 62 3.6 衍合 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 iv 3.6.1 衍合基础 . . . . . . . . . . . . . . . . . . . . . . . . . . 62 3.6.2 更多有趣的衍合 . . . . . . . . . . . . . . . . . . . . . . . 64 3.6.3 衍合的风险 . . . . . . . . . . . . . . . . . . . . . . . . . 66 3.7 小结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 4 服务器上的 Git 69 4.1 协议 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 4.1.1 本地协议 . . . . . . . . . . . . . . . . . . . . . . . . . . 69 优点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 缺点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 4.1.2 SSH 协议 . . . . . . . . . . . . . . . . . . . . . . . . . . 70 优点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 缺点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 4.1.3 Git 协议 . . . . . . . . . . . . . . . . . . . . . . . . . . 71 优点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 缺点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 4.1.4 HTTP/S 协议 . . . . . . . . . . . . . . . . . . . . . . . . . 72 优点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 缺点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 4.2 在服务器部署 Git . . . . . . . . . . . . . . . . . . . . . . . . . . 73 4.2.1 将纯目录转移到服务器 . . . . . . . . . . . . . . . . . . . . 73 4.2.2 小型安装 . . . . . . . . . . . . . . . . . . . . . . . . . . 74 SSH 连接 . . . . . . . . . . . . . . . . . . . . . . . . . . 74 4.3 生成 SSH 公钥 . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 4.4 架设服务器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 4.5 公共访问 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 4.6 网页界面 GitWeb . . . . . . . . . . . . . . . . . . . . . . . . . . 79 4.7 权限管理器 Gitosis . . . . . . . . . . . . . . . . . . . . . . . . . 80 4.8 Git 进程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 4.9 Git 托管服务 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 4.9.1 GitHub . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 4.9.2 建立账户 . . . . . . . . . . . . . . . . . . . . . . . . . . 87 4.9.3 建立新仓库 . . . . . . . . . . . . . . . . . . . . . . . . . 87 4.9.4 从 Subversion 中导入项目 . . . . . . . . . . . . . . . . . . 89 4.9.5 开始合作 . . . . . . . . . . . . . . . . . . . . . . . . . . 90 4.9.6 项目页面 . . . . . . . . . . . . . . . . . . . . . . . . . . 91 4.9.7 派生(forking)项目 . . . . . . . . . . . . . . . . . . . . . 92 4.9.8 GitHub 小节 . . . . . . . . . . . . . . . . . . . . . . . . . 93 4.10 小节 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 5 分布式 Git 95 5.1 分布式工作流程 . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 5.1.1 集中式工作流 . . . . . . . . . . . . . . . . . . . . . . . . 95 5.1.2 集成管理员工作流 . . . . . . . . . . . . . . . . . . . . . . 96 5.1.3 司令官与副官工作流 . . . . . . . . . . . . . . . . . . . . . 97 5.2 为项目作贡献 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 v 5.2.1 提交指南 . . . . . . . . . . . . . . . . . . . . . . . . . . 98 5.2.2 私有的小型团队 . . . . . . . . . . . . . . . . . . . . . . . 99 5.2.3 私有团队间协作 . . . . . . . . . . . . . . . . . . . . . . . 104 5.2.4 公开的小型项目 . . . . . . . . . . . . . . . . . . . . . . . 108 5.2.5 公开的大型项目 . . . . . . . . . . . . . . . . . . . . . . . 112 5.2.6 小结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 5.3 项目的管理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 5.3.1 使用特性分支进行工作 . . . . . . . . . . . . . . . . . . . . 115 5.3.2 采纳来自邮件的补丁 . . . . . . . . . . . . . . . . . . . . . 115 使用 apply 命令应用补丁 . . . . . . . . . . . . . . . . . . . 115 使用 am 命令应用补丁 . . . . . . . . . . . . . . . . . . . . 116 5.3.3 检出远程分支 . . . . . . . . . . . . . . . . . . . . . . . . 118 5.3.4 决断代码取舍 . . . . . . . . . . . . . . . . . . . . . . . . 118 5.3.5 代码集成 . . . . . . . . . . . . . . . . . . . . . . . . . . 119 合并流程 . . . . . . . . . . . . . . . . . . . . . . . . . . 120 大项目的合并流程 . . . . . . . . . . . . . . . . . . . . . . 122 衍合与挑拣(cherry-pick)的流程 . . . . . . . . . . . . . . . 122 5.3.6 给发行版签名 . . . . . . . . . . . . . . . . . . . . . . . . 123 5.3.7 生成内部版本号 . . . . . . . . . . . . . . . . . . . . . . . 124 5.3.8 准备发布 . . . . . . . . . . . . . . . . . . . . . . . . . . 125 5.3.9 制作简报 . . . . . . . . . . . . . . . . . . . . . . . . . . 125 5.4 小结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 6 Git 工具 127 6.1 修订版本(Revision)选择 . . . . . . . . . . . . . . . . . . . . . . 127 6.1.1 单个修订版本 . . . . . . . . . . . . . . . . . . . . . . . . 127 6.1.2 简短的SHA . . . . . . . . . . . . . . . . . . . . . . . . . . 127 6.1.3 关于 SHA-1 的简短说明 . . . . . . . . . . . . . . . . . . . . 128 6.1.4 分支引用 . . . . . . . . . . . . . . . . . . . . . . . . . . 129 6.1.5 引用日志里的简称 . . . . . . . . . . . . . . . . . . . . . . 129 6.1.6 祖先引用 . . . . . . . . . . . . . . . . . . . . . . . . . . 130 6.1.7 提交范围 . . . . . . . . . . . . . . . . . . . . . . . . . . 132 双点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 多点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 三点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 6.2 交互式暂存 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 6.2.1 暂存和撤回文件 . . . . . . . . . . . . . . . . . . . . . . . 134 6.2.2 暂存补丁 . . . . . . . . . . . . . . . . . . . . . . . . . . 136 6.3 储藏(Stashing) . . . . . . . . . . . . . . . . . . . . . . . . . . 137 6.3.1 储藏你的工作 . . . . . . . . . . . . . . . . . . . . . . . . 138 6.3.2 从储藏中创建分支 . . . . . . . . . . . . . . . . . . . . . . 139 6.4 重写历史 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 6.4.1 改变最近一次提交 . . . . . . . . . . . . . . . . . . . . . . 140 6.4.2 修改多个提交说明 . . . . . . . . . . . . . . . . . . . . . . 141 6.4.3 重排提交 . . . . . . . . . . . . . . . . . . . . . . . . . . 142 6.4.4 压制(Squashing)提交 . . . . . . . . . . . . . . . . . . . . . 143 vi 6.4.5 拆分提交 . . . . . . . . . . . . . . . . . . . . . . . . . . 144 6.4.6 核弹级选项: filter-branch . . . . . . . . . . . . . . . . . . 144 从所有提交中删除一个文件 . . . . . . . . . . . . . . . . . . 144 将一个子目录设置为新的根目录 . . . . . . . . . . . . . . . . 145 全局性地更换电子邮件地址 . . . . . . . . . . . . . . . . . . 145 6.5 使用 Git 调试 . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 6.5.1 文件标注 . . . . . . . . . . . . . . . . . . . . . . . . . . 146 6.5.2 二分查找 . . . . . . . . . . . . . . . . . . . . . . . . . . 147 6.6 子模块 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 6.6.1 子模块初步 . . . . . . . . . . . . . . . . . . . . . . . . . 149 6.6.2 克隆一个带子模块的项目 . . . . . . . . . . . . . . . . . . . 151 6.6.3 上层项目 . . . . . . . . . . . . . . . . . . . . . . . . . . 153 6.6.4 子模块的问题 . . . . . . . . . . . . . . . . . . . . . . . . 153 6.7 子树合并 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 6.8 总结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 7 自定义 Git 157 7.1 配置 Git . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 7.1.1 客户端基本配置 . . . . . . . . . . . . . . . . . . . . . . . 157 core.editor . . . . . . . . . . . . . . . . . . . . . . . . . 158 commit.template . . . . . . . . . . . . . . . . . . . . . . . 158 core.pager . . . . . . . . . . . . . . . . . . . . . . . . . 159 user.signingkey . . . . . . . . . . . . . . . . . . . . . . . 159 core.excludesfile . . . . . . . . . . . . . . . . . . . . . . 159 help.autocorrect . . . . . . . . . . . . . . . . . . . . . . 159 7.1.2 Git中的着色 . . . . . . . . . . . . . . . . . . . . . . . . . 160 color.ui . . . . . . . . . . . . . . . . . . . . . . . . . . 160 color.* . . . . . . . . . . . . . . . . . . . . . . . . . . . 160 7.1.3 外部的合并与比较工具 . . . . . . . . . . . . . . . . . . . . 160 7.1.4 格式化与空白 . . . . . . . . . . . . . . . . . . . . . . . . 163 core.autocrlf . . . . . . . . . . . . . . . . . . . . . . . . 163 core.whitespace . . . . . . . . . . . . . . . . . . . . . . . 164 7.1.5 服务器端配置 . . . . . . . . . . . . . . . . . . . . . . . . 164 receive.fsckObjects . . . . . . . . . . . . . . . . . . . . . 164 receive.denyNonFastForwards . . . . . . . . . . . . . . . . . 165 receive.denyDeletes . . . . . . . . . . . . . . . . . . . . . 165 7.2 Git属性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 7.2.1 二进制文件 . . . . . . . . . . . . . . . . . . . . . . . . . 165 识别二进制文件 . . . . . . . . . . . . . . . . . . . . . . . 165 比较二进制文件 . . . . . . . . . . . . . . . . . . . . . . . 166 7.2.2 关键字扩展 . . . . . . . . . . . . . . . . . . . . . . . . . 168 7.2.3 导出仓库 . . . . . . . . . . . . . . . . . . . . . . . . . . 170 export-ignore . . . . . . . . . . . . . . . . . . . . . . . . 170 export-subst . . . . . . . . . . . . . . . . . . . . . . . . 170 7.2.4 合并策略 . . . . . . . . . . . . . . . . . . . . . . . . . . 171 7.3 Git挂钩 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 vii 7.3.1 安装一个挂钩 . . . . . . . . . . . . . . . . . . . . . . . . 171 7.3.2 客户端挂钩 . . . . . . . . . . . . . . . . . . . . . . . . . 171 提交工作流挂钩 . . . . . . . . . . . . . . . . . . . . . . . 171 E-mail工作流挂钩 . . . . . . . . . . . . . . . . . . . . . . 172 其他客户端挂钩 . . . . . . . . . . . . . . . . . . . . . . . 172 7.3.3 服务器端挂钩 . . . . . . . . . . . . . . . . . . . . . . . . 173 pre-receive 和 post-receive . . . . . . . . . . . . . . . . . 173 update . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 7.4 Git 强制策略实例 . . . . . . . . . . . . . . . . . . . . . . . . . . 173 7.4.1 服务端挂钩 . . . . . . . . . . . . . . . . . . . . . . . . . 173 指定特殊的提交信息格式 . . . . . . . . . . . . . . . . . . . 174 实现基于用户的访问权限控制列表(ACL)系统 . . . . . . . . . . 175 只允许 Fast-Forward 类型的推送 . . . . . . . . . . . . . . . 177 7.4.2 Client-Side Hooks . . . . . . . . . . . . . . . . . . . . . . 179 7.5 总结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182 8 Git 与其他系统 183 8.1 Git 与 Subversion . . . . . . . . . . . . . . . . . . . . . . . . . 183 8.1.1 git svn . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 8.1.2 初始设定 . . . . . . . . . . . . . . . . . . . . . . . . . . 184 8.1.3 入门 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 8.1.4 提交到 Subversion . . . . . . . . . . . . . . . . . . . . . . 186 8.1.5 拉取最新进展 . . . . . . . . . . . . . . . . . . . . . . . . 187 8.1.6 Git 分支问题 . . . . . . . . . . . . . . . . . . . . . . . . 188 8.1.7 Subversion 分支 . . . . . . . . . . . . . . . . . . . . . . . 189 创建新的 SVN 分支 . . . . . . . . . . . . . . . . . . . . . . 189 8.1.8 切换当前分支 . . . . . . . . . . . . . . . . . . . . . . . . 190 8.1.9 对应 Subversion 的命令 . . . . . . . . . . . . . . . . . . . 190 SVN 风格的历史 . . . . . . . . . . . . . . . . . . . . . . . 190 SVN 日志 . . . . . . . . . . . . . . . . . . . . . . . . . . 191 SVN 服务器信息 . . . . . . . . . . . . . . . . . . . . . . . 191 略 Subversion 之所略 . . . . . . . . . . . . . . . . . . . . 192 8.1.10Git-Svn 总结 . . . . . . . . . . . . . . . . . . . . . . . . 192 8.2 迁移到 Git . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 8.2.1 导入 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 8.2.2 Subversion . . . . . . . . . . . . . . . . . . . . . . . . . 193 8.2.3 Perforce . . . . . . . . . . . . . . . . . . . . . . . . . . 194 8.2.4 自定导入脚本 . . . . . . . . . . . . . . . . . . . . . . . . 196 8.3 总结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 9 Git 内部原理 203 9.1 底层命令 (Plumbing) 和高层命令 (Porcelain) . . . . . . . . . . . . . 203 9.2 Git 对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204 9.2.1 tree (树) 对象 . . . . . . . . . . . . . . . . . . . . . . . 206 9.2.2 commit (提交) 对象 . . . . . . . . . . . . . . . . . . . . . 208 9.2.3 对象存储 . . . . . . . . . . . . . . . . . . . . . . . . . . 210 viii 9.3 Git References . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 9.3.1 HEAD 标记 . . . . . . . . . . . . . . . . . . . . . . . . . . 213 9.3.2 Tags . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 9.3.3 Remotes . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 9.4 Packfiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 9.5 The Refspec . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 9.5.1 推送 Refspec . . . . . . . . . . . . . . . . . . . . . . . . 220 9.5.2 删除引用 . . . . . . . . . . . . . . . . . . . . . . . . . . 221 9.6 传输协议 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 9.6.1 哑协议 . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 9.6.2 智能协议 . . . . . . . . . . . . . . . . . . . . . . . . . . 223 上传数据 . . . . . . . . . . . . . . . . . . . . . . . . . . 223 下载数据 . . . . . . . . . . . . . . . . . . . . . . . . . . 224 9.7 维护及数据恢复 . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 9.7.1 维护 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 9.7.2 数据恢复 . . . . . . . . . . . . . . . . . . . . . . . . . . 226 9.7.3 移除对象 . . . . . . . . . . . . . . . . . . . . . . . . . . 228 9.8 总结 . . . . .

2016-02-05

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除