#### Git工作流程
Git 能从众多版本控制系统中脱颖而出,其'必杀技特性'是其分支模型,Git分支模型使版本的分支合并起来非常的方便。但是滥用其分支特性也会产生副作用,很可能会出现一个纷乱丛生、结构复杂的分支系统。于是[Vincent Driessen](https://nvie.com/posts/a-successful-git-branching-model/) 提出了一个分支管理模型Git-Flow。它可以使版本库的更新迭代结构清晰,各分支各司其职~
#### Git-Flow
> 开局一张图,内容全靠编
![](https://img.kancloud.cn/b7/03/b703b657b57738edcbb56d9756a40010_1200x1600.png)
* Master -- 线上分支(发布分支,长期存在)
* Develop -- 开发分支(本地分支,长期存在)
* Feature -- 新功能分支
* Release -- 预热分支(预发布分支)
* Hotfix -- 修复分支(Bug分支)
*****
![](https://box.kancloud.cn/4dc8ef862b4e1e70fc45f6d00773160b_614x268.png)
需求是开发的起点,当我们进行功能开发时,先有需求再有功能分支(feature branch)。功能分支是从Develop分支上面分出来的,完成新功能后,该分支上的功能就被合并到Develop分支上,然后删除 `Feature`分支。
*****
![](https://box.kancloud.cn/aeb5cb758836d84cbbd9b319a462825a_614x320.png)
当develop分支积累足够的功能(预定的发布日期临近),就可以建立一个预发布分支(release branch)。预发布分支是从Develop分支上面分出来的,预发布结束以后,再合并到 `Develop` 和 `Master` 分支,然后删除 `Release` 分支。
*****
![](https://box.kancloud.cn/fa159868df4a416d391c6fd832851f9a_614x380.png)
当功能正常运行后,如果遇到紧急问题需要修复,这个时候需要创建一个独立的修复分支(hotfix branch)。修复分支是从Master分支上面分出来的,当问题修复之后,再合并到 `Develop` 和 `Master` 分支,然后删除 `Hotfix` 分支。
*****
优点:
* 结构清晰
* 适合大型团队
缺点:
* 相对复杂
* 频繁切换分支
* 维护两个长期分支 `Master` 和 `Develop`
* 不太适合"持续发布"的项目
#### Github-Flow
[Github flow](https://guides.github.com/introduction/flow/index.html)是Git flow的简化版,专门配合"持续发布"。它是 Github使用的工作流程。
> 它只有一个长期分支,就是**Master**分支。官方[流程](https://guides.github.com/introduction/flow/index.html)如下:
![](https://img.kancloud.cn/9d/a0/9da013cbf837fff47bcccf6b314b9f78_1005x354.png)
1. 根据需求,从`Master`分支拉出新的分支,不区分功能分支与补丁分支。
2. 在分支中的增删改查都要进行提交,会保留一个清晰的历史记录。
3. 你可以在开发过程中任意时刻发起一个`Pull Request`,让别人看到你的请求(困难、想法、建议、工作)。
4. 大家一起评审、讨论、评论你的代码,对话过程中,你还可以不断提交代码。
5. 部署阶段,合并之前你可以在生产分支中进行最终测试,根据测试结果选择合并还是回滚。
6. 验证通过,合并代码到`Master`分支,合并请求后,如果有对应的问题,对应的问题也将被关闭。
优点:
* 简单
* 适合"持续发布"的项目
缺点:
* `线上版本 < Master`分支(无法控制发布时间,IOS应用商店功能审核)
* 需要多维护一个 `Production` 分支来追踪线上版本
#### Gitlab-Flow
[Gitlab flow](http://doc.gitlab.com/ee/workflow/gitlab_flow.html)是 Git flow 与 Github flow 的综合。它吸取了两者的优点,既有适应不同开发环境的弹性,又有单一主分支的简单和便利。
##### 持续发布
![](https://img.kancloud.cn/02/73/027386423c629dbcd5a5b708be4f463b_338x549.png)
在 `Master` 分支之外建立线上 `Production` 分支,有新需求的情况下,以 `Master` 分支为基础迁出一个分支进行开发,功能完成之后 `merge` 到 `Master` 分支,确认没问题后 `merge` 到 `Production` 分支。 `Master` 分支被称为上游分支,代码的变化必须由"上游"向"下游"发展。
##### 版本发布
![](https://img.kancloud.cn/76/cb/76cb458e70552f68261bb41c7120a788_550x719.png)
对于"版本发布"的项目,才会使用发布分支,以`master`为起点拉出一个分支,每个分支都要包含次要版本,比如`2-3-stable`、`2-4-stable`等。
以后,只有修补bug,才允许将代码合并到这些分支,并且此时要更新次要版本号。
##### 参考链接
[Git实操网站 - 生动形象](https://learngitbranching.js.org)
[ngulc - 博客园](https://www.cnblogs.com/lcngu/p/5770288.html)
[阮一峰 - Git分支管理策略](http://www.ruanyifeng.com/blog/2012/07/git.html)
[阮一峰 - Git工作流程](http://www.ruanyifeng.com/blog/2015/12/git-workflow.html)
[Github-Flow](https://guides.github.com/introduction/flow/index.html)
[Gitlab-Flow](https://docs.gitlab.com/ee/topics/gitlab_flow.html)
- 版本控制之Git简介
- Git工作流程
- Git工作区、暂存区、版本库
- Git 指令汇总
- Git 忽略文件规则 .gitignore
- pull request
- HTTP简介
- HTTP - Keep-Alive
- HTTP缓存
- XMLHttpRequest
- Fetch
- 跨域
- HTTP 消息头
- TCP/IP
- TCP首部
- IP首部
- IP 协议
- TCP/IP漫画
- 前端开发规范
- 前端开发规范整理
- 前端未来规划
- HTML思维导图
- CSS思维导图
- 布局
- position,float,display的关系和优先级
- line-height、height、font-size
- 移动端适配
- JS 对象
- JS 原型模式 - 创建对象
- JS 预编译
- 探索JS引擎
- ES