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小时开机为大家服务,所以叫做服务器.我们完全可以把自己 ...
随机推荐
- 【Luogu】P3787冰精冻西瓜(线段树)
题目链接 我脑子怕不是有坑qwqqq 用前缀和思想,dis[i]表示i离根的距离,那么修改操作其实是对x的子树区间加y/dis[x],查询的时候*dis[to]即可. 对付/0错的思路是建森林,然而这 ...
- CentOS7 Failed to start iptables.解决方法
Shit, CentOS怎么这么多bug.... 公司机房周日突然掉电,之前的Openstack环境就不能用了. 重新Run了一遍安装脚本,发现这个错误: iptables 咋又起不来了呢..... ...
- js方法encodeURI后,关于get请求url长度的限制测试与总结
(本文仅作个人记录只用比较啰嗦,重点只看红字部分即可) Test.jsp 请求test1.jsp IE11环境下,get请求url最多4096个字节: 请求的是http://localhost:908 ...
- bzoj 4034 [HAOI2015]树上操作 入栈出栈序+线段树 / 树剖 维护到根距离和
题目大意 有一棵点数为 N 的树,以点 1 为根,且树点有边权.然后有 M 个 操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a . 操作 2 :把某个节点 x 为根的子树中所有点的点权都 ...
- UVa11424 GCD - Extreme (I)
直接两重循环O(n^2)算gcd……未免太耗时 枚举因数a和a的倍数n,考虑gcd(i,n)==a的i数量(i<=n) 由于gcd(i,n)==a等价于gcd(i/a,n/a)==1,所以满足g ...
- DataSet的Merge方法合并两张表
原文发布时间为:2008-08-01 -- 来源于本人的百度文章 [由搬家工具导入] UniqueConstraint uc = new UniqueConstraint("pk" ...
- scroll与按钮的位置
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Perl语言入门--5--散列、hash
hash 一.关联数组的形式 %h=('a',1,'b',2); a是key 1是value b是key 2是value 以%开头,()为空散列 %h=('a'=>1,' ...
- AC日记——[CQOI2014]危桥 洛谷 P3163
题目描述 Alice和Bob居住在一个由N座岛屿组成的国家,岛屿被编号为0到N-1.某些岛屿之间有桥相连,桥上的道路是双向的,但一次只能供一人通行.其中一些桥由于年久失修成为危桥,最多只能通行两次.A ...
- python re的findall和finditer
记录一个现象: 今天在写程序的时候,发现finditer和findall返回的结果不同.一个为list,一个为iterator. 红色箭头的地方,用finditer写的时候,print(item.gr ...