您好, 访客   登录/注册

基于git工具的多分支并行开发上线流程

来源:用户上传      作者:

  摘要    在软件开发过程中,经常使用并行开发的方式,即将同一个项目分配给不同的人来完成,每个人负责其中的一个模块,等所有人都完成后,再进行整合。最后整合面临的问题是需要选出一个人来进行专门整合,此时的工作量会非常的庞大。本文介绍了git,svn等scm软件的区别,并结合实际场景,介绍了使用git工具,在一个简单的gitflow下,并行开发的场景。希望能够帮助其它开发人员使用git工具来进行类似的工作。
   【关键词】软件开发 git
   1 git及其它工具介绍
   git是版本管理工具的一种,它是分布式的,每一个git repo都是包含了完整的信息和数据,开发者完全可以在本地进行开发,无需网络连接。git工具的最大特点是多分支,可以支持多分支开发,这为多分支并行开发提供了基础。
   相比git,SVN是集中式版本控制系统,所有代码集中存放在中央服务器中,SVN最大的缺点是必须联网才能工作,而且会受网络速度的限制。另外集中式版本控制系统依赖于中央服务器,假如服务器宕机了,任何人都无法提交代码。并且SVN的分支相对git要弱得多。
   其它类似的SCM比如,Mercurial和Bazaar还有微软的VCS,但是使用最多最广,功能最为强大的还是git。
   git的分支:
   master:主分支,当前分支上的代码随时可以直接发布,并且只能通过Pull Request从其他分支进行合并,而不能直接push修改。当开发告一段落,产生了新的可供发布的代码时,master分支通过Pull Request更新了代码。
   develop:开发分支,保存当前最新开发成果的分支,即当一个新功能开发完毕需要先合并到develop分支,这个分支的代码会进行每日的代码持续集成。所有的开发任务都是从这个分支Checkout新的特性分支进行开发。
   feature:特性分支,当开发新的功能时,从develop分支Checkout新的feature分支,这个分支的代码最终要合并回develop分支或者废弃掉。feature分支通常以功能为单位。
   2 git,gitlab和gitflow
   git的功能是非常强大的,但是使用它有一定的难度,尤其是要分清git,gitlab,gitflow的区别。
   git如前所述,就是一个基础工具,如果在linux如红帽或者是centos下,yum install git就能安装这个工具,但是这个工具只具有基础的功能,是基于命令行的,用户管理等待其它功能基本没有,只使用这个linux下的git来进行开发管理还是有以难度的。
   所以有了gitlab,这个是基于git的web管理工具,使用它有友好的界面和完备的管理各种管理功能,甚至还集成了CI/CD功能,使用gitlab来管理开发工作会非常方便,最难得是它支持在内网部署,这就为广大开发者提供了一个强大的工具。类似的软件还有gogs。
   而gitflow不同于前两者,它是开发的流程和约定。
   3 基于git工具建立并行开发上线流程
   3.1 灵活的gitflow
   我们的项目包含大约2000个独立的小文件,对于这个项目的管理,我们使用如下的gitflow:
   (1)设置开发,测试和维护角色,并行工作,互不干涉。仓库设置develop和master分支,并禁止直接推送。
   (2)每一个开发人员使用一个开发分支,分支名字不能重复,开发完毕后上传远程仓库。
   (3)测试人员测试脚本通过后,将开发分支合并到develop并删除此分支。
   (4)维护人员定期合并develop和master分支,并将项目同步到服务器。
   上述的gitflow提供了并行开发的管理流程,并且能最大可能的避免冲突的产生,这样的并行开发上线效率将大大的优于串行开发的效率。
   3.2开发过程
   将项目托管到gogs服务器上,将它作为远程仓库,并建立两个分支:master分支(稳定生产版),develop分支(测试完成版),然后开发人员根据不同的任务,建立本地分支,在该分支上进行开发,工作完成后将代码push到develop分支上,假如有冲突,则要先解决冲突,而后再次将代码push到develop分支上。具体流程如下:
   (1)首先在电脑上安装TortoiseGit:可以从Git官网直接下载安装程序,然后按默认选项安装即可。
   (2)将代码下载到本地,如果本地已经有代码则直接进入下一步:
   Git clone http://133.96.72.138:30000/tianjiangtao/2017GS.git
   (3)在本地进行常规开发,可使用vscode进行开发,增加、修改、删除文件等等操作。
   更改目录:cd 2017GS;
   切换分支到develop(开发分支):git checkout develop;
   查看分支:git branch-a;
   创建自己的dev分支(dev名称可以任意取):git branch dev;
   切换到dev分支:git checkout dev;添加修改:git add *;
   (4)在本地开发工作告一段落,需要把本地代码推送(Push)到远程分支上,提交变更及增加新的分支,服务端如果无分支,就在远端创建:git push--set-upstream origin dev。
   提交后会与远程库进行一次同步,最终清理掉版本库中的dev分支,但本地工作區中的dev分支并不会删除:git remote prune origin。
   (5)如果其他人已经向dev分支推送了他的提交,而你也对同样的文件作了修改,在推送的时候会提示推送失败,因为他的最新提交和你试图推送的提交有冲突。解决办法很简单:先用git pull把最新的提交从dev拖下来,然后,在本地合并解决冲突,再推送到远程仓库。
   4 结语
   综上所述,基于git的并行开发上线流程,可以实现团队内的有效合作,提高工作效率,避免资源浪费。版本库本地化,支持离线提交,相对独立不影响协同开发。每个开发者都拥有自己的版本控制库,在自己的版本库上可以任意的执行提交代码、创建分支等行为。更少的“仓库污染”。git对于每个工程只会产生一个 .git目录,这个工程所有的版本控制信息都在这个目录中。
转载注明来源:https://www.xzbu.com/1/view-14841888.htm