一、目的

前三章介绍了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. 周赛Problem 1021: 分蛋糕(埃拉托斯特尼筛法)

    Problem 1021: 分蛋糕 Time Limits:  1000 MS   Memory Limits:  65536 KB 64-bit interger IO format:  %lld  ...

  2. BZOJ 4817 [Sdoi2017]树点涂色 ——LCT 线段树

    同BZOJ3779. SDOI出原题,还是弱化版的. 吃枣药丸 #include <map> #include <cmath> #include <queue> # ...

  3. bzoj1076【SCOI2008】奖励关

    题意:http://www.lydsy.com/JudgeOnline/problem.php?id=1076 有n种物品等概率落下,求期望最优收益 sol:  一眼看上去就是状压dp吧QAQ数据范围 ...

  4. 【CCF】商路

    [60分] #include<iostream> #include<cstdio> #include<cstring> #include<string> ...

  5. ASP.NET路由应用及IIS配置(非MVC)

    一.前后台代码: Global.cs: using System.Web.Routing; ... void Application_Start(object sender, EventArgs e) ...

  6. 将xml转换为PHP数组

    这里提供一个类来将XML转换为PHP数组,下面是类的代码 <?php/** * XML2Array: A class to convert XML to array in PHP * It re ...

  7. React-Native Navigator-this.props.navigation....

    render() { return ( <View> <Text>2</Text> <Button title = "跳转到指定的页面" ...

  8. IDEA连接linux服务器

    idea连接linux(完成了xshell和xftp连接linux的功能,可以直接卸载这俩了..) File->settings->Deployment左侧加号添加 选择传输类型ftp或者 ...

  9. Redis集群设计原理

    ---恢复内容开始--- Redis集群设计包括2部分:哈希Slot和节点主从,本篇博文通过3张图来搞明白Redis的集群设计. 节点主从: 主从设计不算什么新鲜玩意,在数据库中我们也经常用主从来做读 ...

  10. Jenkins使用Pipeline插件实现多个Job之间的串并联(教程收集)(待实践)

    在原始不使用插件时,在Jenkins我们要实现多个Job之间的连续集成时,我们一般的做法就是在每个Job上关联另一个Job,但是,这样做有个弊端,只能是连续的,如果要实现串或并联这样的,估计比较难:但 ...