git学习(4)---工作流
一、目的
前三章介绍了git工具本身的操作,主要包含本地仓库操作和远程库操作两部分内容。接下来,我们将介绍怎样使用git进行项目开发,也叫做git工作流。
git工作流分为三种模式:共享远程库模式、独立远程库之github模式、独立远程库之linux模式。
本文涉及到的全部操作都是在Ubuntu
14.04环境中进行的,git版本号是1.9.1。
二、三种角色
通常一个项目中须要下面几种角色:项目维护者、模块维护者、普通开发人员。
项目维护者的主要工作内容是分支合并以及版本号公布;模块维护者的主要工作内容是补丁裁决、代码审核和代码合入;开发人员的主要工作内容是补丁开发。
依据项目的规模。这三种角色没有明显的界限,可能会重叠。比如,在一个小型的项目中,不须要为模块设置单独的维护者。那么项目维护者和模块维护者可能就是同一个人,统称为维护者,由该维护者负责补丁裁决、代码审核和版本号公布工作。其余的开发人员仅仅须要负责补丁开发就可以。
三、共享远程库模式
共享远程库模式是指项目的全部开发人员共享同一个git远程仓库,而且拥有同样的訪问权限。
比如,开发人员1、开发人员2和维护者共享同一个git远程仓库origin。而且都拥有同样的訪问权限。
远程库有两个分支master和next,master用来版本号公布,next用来特性开发。
开发人员1和开发人员2仅仅工作在next分支上,维护者工作在master分支上。
通常的工作流例如以下:
1、开发人员1在本地完毕了C4的开发;
2、开发人员2在本地完毕了C5的开发;
3、开发人员1使用git
push将C4推送到远程库上。
4、开发人员2使用git
fetch、git rebase命令获取到C4(在本地进行冲突处理),而且使用git
push将C5推送到远程库上。
5、维护者使用git
pull命令下载远程库的next分支到本地库中。在本地,将next分支合入到master中。最后,使用git
push命令将本地master推送到远程库上;
6、假设版本号须要公布。维护者在本地库上使用git
tag命令打上标签,并将本地库的标签推送到远程库上,完毕版本号的公布。
这样的工作流的特点是,开发人员和维护者同一时候拥有远程库的訪问权限。可是,通过管理手段约束开发人员在next分支工作。维护者在master分支工作。
四、独立远程库之github模式
独立远程库之github模式是指项目的维护者和开发人员拥有各自独立的git远程仓库。维护者和开发人员在各自的远程库中工作。当开发人员工作完毕时。请求维护者将开发人员远程库中的内容合入维护者的远程库中。
比如。维护者的远程仓库是origin,有两个分支master和next,master用来版本号公布。next用来特性开发。开发人员通过fork操作复制了维护者的origin。为了区分。将开发人员的远程库重命名为dev。
通常的工作流例如以下:
1、开发人员通过github站点的forkbutton复制维护者的远程库。生成开发人员自己的远程库dev。
2、开发人员在本地库中完毕C4的开发。并通过git
push推送到开发人员的远程库dev上。
3、开发人员通过github站点的request
pull功能向维护者请求合并开发人员远程库的分支;
4、维护者经过代码评审后,在本地库通过git
pull命令合并开发人员远程库的分支。
5、维护者通过git
push命令将本地库推送到远程库上。
这样的工作流的特点是。开发人员和维护者拥有独自的远程库。开发人员在自己的远程库中工作,当工作完毕时通过某种方式通知维护者(通过github的request
pull功能。或者开发人员通过邮件告知维护者)合入开发人员的分支。
五、独立远程库之linux模式
独立远程库之linux模式是指项目维护者和模块维护者拥有各自独立的git远程仓库,并在各自的远程库中工作。开发人员通过邮件给模块维护者发送补丁。请求模块维护者合入补丁;最后。当模块维护者的工作完毕时,请求项目维护者将模块维护者远程库中的内容合入项目维护者的远程库中。
比如,项目维护者linus的远程仓库是origin,vfs模块的维护者是Al
Viro,他的远程仓库是vfs。
通常的工作流例如以下:
1、开发人员通过git
clone命令下载模块维护者者的远程库vfs;
2、开发人员在本地库中完毕C4的开发,并通过git
format-patch命令制作补丁;
3、开发人员将补丁通过邮件发送给模块维护者AI
Viro。
4、模块维护者AI
Viro收到邮件后进行代码评审,评审通过后,使用git am命令将补丁打到本地库中;
5、模块维护者使用git
push命令将本地库推送到远程库上;
6、模块维护者发送标题为[GIT
PULL]的邮件给项目维护者linus;
7、项目维护者收到邮件后,使用git
pull命令合并模块维护者远程库的分支;
8、项目维护者通过git
push命令将本地库推送到远程库上。
9、项目维护者通过git
shortlog命令生成将要公布版本号合入的需求信息。然后通过git tag命令为版本号打标签,最后使用git
archive命令打包版本号。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbHVvbW93ZWlsYW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
六、总结
git由于分支的灵活性,导致工作流的灵活性;假设乱用分支,会导致工作流的混乱,因此本文总结出了三种经常使用的工作流,它们各有特点,须要依据项目的须要选择合适的工作流。
版权声明:
git学习(4)---工作流的更多相关文章
- Git版本控制与工作流详解
这篇文章是针对git版本控制和工作流的总结,如果有些朋友之前还没使用过git,对git的基本概念和命令不是很熟悉,可以从以下基本教程入手: 专为设计师而写的GitHub快速入门教程 git – 简明指 ...
- 【学习总结】Git学习-参考廖雪峰老师教程-总
公元2018-10-21 实验室台式机 win7 64位 参考教程: 廖雪峰Git教程 其他资料:Git-book 北大一只总结的笔记,最终整理的时候可以参考:Git笔记 评论区看到的另一个人,总结在 ...
- git 学习之基础知识
在前面的一个帖子中我们知道了不同的版本控制系统的不同,在这个帖子中我们会大致的了解到它们是管理各个版本的,这对我们学习 git 是很有帮助的. 对于集中式的版本控制系统来说每次的更新主要记录内容的具体 ...
- git学习------>写给 Git 初学者的7个建议
PS:本文转载于(http://blog.jobbole.com/50603/),本文由 伯乐在线 - 吴鹏煜 翻译. 英文出处:(http://sixrevisions.com/web-develo ...
- Git 学习看这篇就够了!
Git是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本管理. 可能新手会问"git和github有什么关系啊?" git是一个版本控制工具: githu ...
- Git学习笔记与IntelliJ IDEA整合
Git学习笔记与IntelliJ IDEA整合 一.Git学习笔记(基于Github) 1.安装和配置Git 下载地址:http://git-scm.com/downloads Git简要使用说明:h ...
- git学习之branch分支
作为新手,站在我的角度肤浅的来理解,分支就是相当于开辟了一个新的临时工作区,在这个工作区进行文件代码改动,然后在合并到master主工作区,这样能保证主工作区的安全性和稳定性,对于团队协作尤为重要. ...
- git学习手册
#git学习手册 git: Git是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本管理.[2] Git 是 Linus Torvalds 为了帮助管理 Linux内核开发而 ...
- Git学习笔记(10)——搭建Git服务器
本文主要记录了Git服务器的搭建,以及一些其他的配置,和最后的小总结. Git远程仓库服务器 其实远程仓库和本地仓库没啥不同,远程仓库只是每天24小时开机为大家服务,所以叫做服务器.我们完全可以把自己 ...
随机推荐
- [USACO13JAN] Cow Lineup (单调队列,尺取法)
题目链接 Solution 尺取法板子,算是复习一波. 题中说最多删除 \(k\) 种,那么其实就是找一个颜色种类最多为 \(k+1\) 的区间; 统计一下其中最多的颜色出现次数. 然后直接尺取法,然 ...
- FZOJ Problem 2103 Bin & Jing in wonderland
...
- Pόlya定理-学习笔记
gi为一个为一个置换 c(g),为c(g)的轮换的数量 (循环的数量) 太监了
- 转 Python爬虫入门四之Urllib库的高级用法
静觅 » Python爬虫入门四之Urllib库的高级用法 1.设置Headers 有些网站不会同意程序直接用上面的方式进行访问,如果识别有问题,那么站点根本不会响应,所以为了完全模拟浏览器的工作,我 ...
- javascript解决小数的加减乘除精度丢失的方案
原文:http://www.jb51.net/article/85463.htm function accDiv(arg1,arg2){ var t1=0,t2=0,r1,r2; try{t1=arg ...
- Chtml的一些例子
<!-- 如果是修改的话,调用已关联的单元 --> <?php foreach ($unionZones as $unit) { echo CHtml::openTag('div', ...
- LeetCode OJ--Insert Interval **
https://oj.leetcode.com/problems/insert-interval/ 给出有序的区间来,再插入进去一个,也就是区间合并. 刚开始确立了几个思路,看要插入的区间的start ...
- react native 添加mobx
"babel-plugin-transform-decorators-legacy": "^1.3.5", "babel-preset-react-n ...
- R语言table()函数
R语言table()函数比较有用,两个示例尤其是混淆矩阵这个案例比较有用: 例子一:统计频次 z<-c(1,2,2,4,2,7,1,1);z1<-table(z);summary(z1); ...
- Swoole RPC 的实现
目录 概述 实现效果 代码 小结 概述 这是关于 Swoole 学习的第七篇文章:Swoole RPC 的实现. 第六篇:Swoole 整合成一个小框架 第五篇:Swoole 多协议 多端口 的应用 ...