git学习(4)---工作流

一、目的

        前三章介绍了git工具本身的操作,主要包含本地仓库操作和远程库操作两部分内容。接下来,我们将介绍怎样使用git进行项目开发,也叫做git工作流。

        git工作流分为三种模式:共享远程库模式、独立远程库之github模式、独立远程库之linux模式。

        本文涉及到的全部操作都是在Ubuntu 14.04环境中进行的,git版本号是1.9.1


二、三种角色

        通常一个项目中须要下面几种角色:项目维护者、模块维护者、普通开发人员。

        项目维护者的主要工作内容是分支合并以及版本号公布;模块维护者的主要工作内容是补丁裁决、代码审核和代码合入;开发人员的主要工作内容是补丁开发。

        依据项目的规模。这三种角色没有明显的界限,可能会重叠。比如,在一个小型的项目中,不须要为模块设置单独的维护者。那么项目维护者和模块维护者可能就是同一个人,统称为维护者,由该维护者负责补丁裁决、代码审核和版本号公布工作。其余的开发人员仅仅须要负责补丁开发就可以。


三、共享远程库模式

        共享远程库模式是指项目的全部开发人员共享同一个git远程仓库,而且拥有同样的訪问权限。

        比如,开发人员1、开发人员2和维护者共享同一个git远程仓库origin。而且都拥有同样的訪问权限。

远程库有两个分支masternextmaster用来版本号公布,next用来特性开发。

开发人员1和开发人员2仅仅工作在next分支上,维护者工作在master分支上。


通常的工作流例如以下:

        1、开发人员1在本地完毕了C4的开发;

        2、开发人员2在本地完毕了C5的开发;

        3、开发人员1使用git pushC4推送到远程库上。

        4、开发人员2使用git fetchgit rebase命令获取到C4(在本地进行冲突处理),而且使用git pushC5推送到远程库上。

        5、维护者使用git pull命令下载远程库的next分支到本地库中。在本地,将next分支合入到master中。最后,使用git push命令将本地master推送到远程库上;

        6、假设版本号须要公布。维护者在本地库上使用git tag命令打上标签,并将本地库的标签推送到远程库上,完毕版本号的公布。


        这样的工作流的特点是,开发人员和维护者同一时候拥有远程库的訪问权限。可是,通过管理手段约束开发人员在next分支工作。维护者在master分支工作。


四、独立远程库之github模式

        独立远程库之github模式是指项目的维护者和开发人员拥有各自独立的git远程仓库。维护者和开发人员在各自的远程库中工作。当开发人员工作完毕时。请求维护者将开发人员远程库中的内容合入维护者的远程库中。

        比如。维护者的远程仓库是origin,有两个分支masternextmaster用来版本号公布。next用来特性开发。开发人员通过fork操作复制了维护者的origin。为了区分。将开发人员的远程库重命名为dev


通常的工作流例如以下:

        1、开发人员通过github站点的forkbutton复制维护者的远程库。生成开发人员自己的远程库dev

        2、开发人员在本地库中完毕C4的开发。并通过git push推送到开发人员的远程库dev上。

        3、开发人员通过github站点的request pull功能向维护者请求合并开发人员远程库的分支;

        4、维护者经过代码评审后,在本地库通过git pull命令合并开发人员远程库的分支。

        5、维护者通过git push命令将本地库推送到远程库上。



        这样的工作流的特点是。开发人员和维护者拥有独自的远程库。开发人员在自己的远程库中工作,当工作完毕时通过某种方式通知维护者(通过githubrequest pull功能。或者开发人员通过邮件告知维护者)合入开发人员的分支。


五、独立远程库之linux模式

        独立远程库之linux模式是指项目维护者和模块维护者拥有各自独立的git远程仓库,并在各自的远程库中工作。开发人员通过邮件给模块维护者发送补丁。请求模块维护者合入补丁;最后。当模块维护者的工作完毕时,请求项目维护者将模块维护者远程库中的内容合入项目维护者的远程库中。

        比如,项目维护者linus的远程仓库是originvfs模块的维护者是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命令打包版本号。


六、总结

        git由于分支的灵活性,导致工作流的灵活性;假设乱用分支,会导致工作流的混乱,因此本文总结出了三种经常使用的工作流,它们各有特点,须要依据项目的须要选择合适的工作流。


版权声明:

    原创作品,如非商业性转载,请注明出处;如商业性转载出版。请与作者联系。

原文地址:https://www.cnblogs.com/slgkaifa/p/6854836.html