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小时开机为大家服务,所以叫做服务器.我们完全可以把自己 ...
随机推荐
- 【bzoj3751】[NOIP2014]解方程 数论
题目描述 已知多项式方程: a0+a1*x+a2*x^2+...+an*x^n=0 求这个方程在[1,m]内的整数解(n和m均为正整数). 输入 第一行包含2个整数n.m,每两个整数之间用一个空格隔开 ...
- 部署 DevStack
本节按照以下步骤部署 DevStack 实验环境,包括控制节点和计算节点 创建虚拟机 按照物理资源需求创建 devstack-controller 和 devstak-compute 虚拟机 安装操作 ...
- 【Visual Studio】Windows program compatibility mode is on, turn it off……
[问题描述]Windows 10上安装 Visual Studio Ultimate 2013,出现下面错误: [解决方案]将.iso文件解压到硬盘再安装.
- vue + django 的权限控制
用vue做前端页面, Django 提供api, 写了一个后台系统,结合方式是vue打包后的dist目录直接作为Django的静态目录, 这样的好处是不用配置Nginx具体的做法不在这里写了,记一下遇 ...
- Python Challenge 第三关
进入第三关,还是一张图加一句话:One small letter, surrounded by EXACTLY three big bodyguards on each of its sides. 图 ...
- HDU 5794 A Simple Chess(杨辉三角+容斥原理+Lucas定理)
题目链接 A Simple Chess 打表发现这其实是一个杨辉三角…… 然后发现很多格子上方案数都是0 对于那写可能可以到达的点(先不考虑障碍点),我们先叫做有效的点 对于那些障碍,如果不在有效点上 ...
- 利用注解和反射,将Bean枚举字段的值填入相应的字段中,并转化为fastjson返回前台
需求:需要将枚举类型的字段例如enable(是否启用)转化为enable:1,enableName:是.这种形式返回给前台. 思路:在bean字段上加上枚举类型的注解,通过字段的值和枚举类反射获取枚举 ...
- BZOJ1005明明的烦恼 Prufer + 分解質因數 + 高精度
@[高精度, Prufer, 質因數分解] Description 自从明明学了树的结构,就对奇怪的树产生了兴趣......给出标号为1到N的点,以及某些点最终的度数,允许在 任意两点间连线,可产生多 ...
- BZOJ1001[BeiJing2006]狼抓兔子最小割網絡流
Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一 ...
- Java heap space设置方法记录
最近被 OutOfMemory Error折腾得够呛,记载一点设置JVM虚拟机内存Javaheap space的方法. Tomcat 7 参考: http://www.davidghedini.co ...