一、目的

前三章介绍了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)---工作流的更多相关文章

  1. Git版本控制与工作流详解

    这篇文章是针对git版本控制和工作流的总结,如果有些朋友之前还没使用过git,对git的基本概念和命令不是很熟悉,可以从以下基本教程入手: 专为设计师而写的GitHub快速入门教程 git – 简明指 ...

  2. 【学习总结】Git学习-参考廖雪峰老师教程-总

    公元2018-10-21 实验室台式机 win7 64位 参考教程: 廖雪峰Git教程 其他资料:Git-book 北大一只总结的笔记,最终整理的时候可以参考:Git笔记 评论区看到的另一个人,总结在 ...

  3. git 学习之基础知识

    在前面的一个帖子中我们知道了不同的版本控制系统的不同,在这个帖子中我们会大致的了解到它们是管理各个版本的,这对我们学习 git 是很有帮助的. 对于集中式的版本控制系统来说每次的更新主要记录内容的具体 ...

  4. git学习------>写给 Git 初学者的7个建议

    PS:本文转载于(http://blog.jobbole.com/50603/),本文由 伯乐在线 - 吴鹏煜 翻译. 英文出处:(http://sixrevisions.com/web-develo ...

  5. Git 学习看这篇就够了!

    Git是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本管理. 可能新手会问"git和github有什么关系啊?" git是一个版本控制工具: githu ...

  6. Git学习笔记与IntelliJ IDEA整合

    Git学习笔记与IntelliJ IDEA整合 一.Git学习笔记(基于Github) 1.安装和配置Git 下载地址:http://git-scm.com/downloads Git简要使用说明:h ...

  7. git学习之branch分支

    作为新手,站在我的角度肤浅的来理解,分支就是相当于开辟了一个新的临时工作区,在这个工作区进行文件代码改动,然后在合并到master主工作区,这样能保证主工作区的安全性和稳定性,对于团队协作尤为重要. ...

  8. git学习手册

    #git学习手册 git: Git是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本管理.[2] Git 是 Linus Torvalds 为了帮助管理 Linux内核开发而 ...

  9. Git学习笔记(10)——搭建Git服务器

    本文主要记录了Git服务器的搭建,以及一些其他的配置,和最后的小总结. Git远程仓库服务器 其实远程仓库和本地仓库没啥不同,远程仓库只是每天24小时开机为大家服务,所以叫做服务器.我们完全可以把自己 ...

随机推荐

  1. Welcome-to-Swift-02基本运算符

    运算符是检查,改变,合并值的特殊符号或短语.例如,加号+将两个数相加(如let i = 1 + 2).复杂些的运行算例如逻辑与运算符&&(如if enteredDoorCode &am ...

  2. SparkStreaming 编程指南

    摘要:学习SparkStreaming从官网的编程指南开始,由于Python编码修改方便不用打包,这里只整理python代码! 一.概述 Spark Streaming 是 Spark Core AP ...

  3. HDU——2087剪花布条

    剪花布条 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  4. MySQL-MongoDB开源监控利器之PMM

    背景说明: PMM是percona公司提供的一个对于MySQL和MongoDB的监控和管理平台.PMM有两部分组成PMM Client和PMM Server PMM Client:安装在每一台需要进行 ...

  5. Java面试题之Array和ArrayList的区别

    Array和ArrayList的区别: 1.Array类型的变量在声明的同时必须进行实例化(至少得初花数组的大小),而ArrayList可以只是先声明: 2.Array始终是连续存放的:而ArrayL ...

  6. 2016 Multi-University Training Contest 10 solutions BY BUPT

    1001. 一个数组上的两个区间求中位数,可以通过分类讨论直接找到中位数,复杂度O(1).不过本题数据较小,优美的log(n)也可过. 1002. 直接求得阴影面积表达式即可. 1003. 二分完成时 ...

  7. Button Style Status

    <Window x:Class="Dxsl.WPF.APP.Views.StyleTest2" xmlns="http://schemas.microsoft.co ...

  8. (5)DataSet

    DataTable赋值给DataSet DataSet ds = new DataSet(); DataTable dt1 = new DataTable(); DataTable dt2 = new ...

  9. Codeforces 786B Legacy(线段树优化建图)

    题目链接  Legacy 首先对于输入的$n$,建立一棵线段树. 显然线段树有大概$2n$个结点,每个节点对应一段区间 我们把这$2n$个结点加入我们的无向图中,一起跑最短路. 具体连边方案: 我们把 ...

  10. Java创建和解析Json数据方法(三)——json-lib包的使用

    (三)json-lib包的使用         这篇笔记主要介绍json-lib包的创建和解析json数据的方式,主要是的JSONObject.JSONArray和Java对象:beans, maps ...