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

来源:互联网 发布:酷音铃声mac版本 编辑:程序博客网 时间:2024/04/30 11:11

一、目的

        前三章介绍了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网站的fork按钮复制维护者的远程库,生成开发者自己的远程库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因为分支的灵活性,导致工作流的灵活性;如果乱用分支,会导致工作流的混乱,因此本文总结出了三种常用的工作流,它们各有特点,需要根据项目的需要选择合适的工作流。


版权声明:

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

0 0
原创粉丝点击