首页 > 其他分享 >实际项目中如何使用Git做分支管理

实际项目中如何使用Git做分支管理

时间:2023-10-30 15:26:18浏览次数:39  
标签:Git develop 二狗 master 版本 实际 分支

前言

记得刚工作的时候根本不知道什么是版本管理工具,有一次和别人聊天,人家问你们公司代码用什么版本管理工具?我说啥是版本管理工具,我们一般用U盘拷贝,然后人家就顾左右而言他了。后来我知道了有个东西叫`SVN`,后来又知道了还有个东西叫`Git`。所以说刚毕业的同学一定要优先进入专业的大公司,就像年轻时候应该去大城市闯两年一样,眼界以及你遇到的牛人会大大加快你以后成功的进程。

概述

本文主要是介绍一种在具体实践中使用Git来管理项目开发的一种成功的方式,其实主要思想来源于这篇文章

A successful Git branching model​nvie.com/posts/a-successful-git-branching-model/

,网上大部分教程都是致敬这篇文章。

 

Git的基本使用方法

关于git的基本教程,强烈建议阅读(廖雪峰老师的Git教程),对初学者非常友好。

使用Git管理项目的方式

在实际开发中如何使用`Git`没有一个标准答案,使用方式也是各式各样,很多基本上都是把Git当SVN来用。下面介绍的是一种经过实践的运行比较良好的管理方式。

主分支

实际开发中,一个仓库(通常只放一个项目)主要存在两条主分支:master与develop分支。这个两个分支的生命周期是整个项目周期。就是说,自创建出来就不会删除,会随着项目的不断开发不断的往里面添加代码。master分支是创建git仓库时自动生成的,随即我们就会从master分支创建develop分支,如下图所示。

master:这个分支最为稳定,这个分支代表项目处于可发布的状态。

例如王二狗向`master`分支合并了代码,那就意味着王二狗完成了此项目的一个待发布的版本,项目经理可以认为,此项目已经准备好发布新版本了。所以`master`分支不是随随便便就可以签入代码的地方,只有计划发布的版本功能在`develop`分支上全部完成,而且测试没有问题了才会合并到`master`上。

 

develop:作为开发的分支,平行于master分支。

例如王二狗要开发一个注册功能,那么他就会从`develop`分支上创建一个feature分支 `fb-register`(后面讲),在`fb-register`分支上将注册功能完成后,将代码合并到develop分支上。这个`fb-register`就完成了它的使命,可以删除了。项目经理看王二狗效率很高啊,于是:“二狗你顺带把登录功能也做了吧”。二狗心中暗暗骂道:日了个狗的,但是任务还的正常做,二狗就会重复上面的步骤:从develop分支上新创建一个名为`fb-login`的分支,喝杯咖啡继续开发,1个小时后登录功能写好了,二狗又会将这个分支的代码合并回develop分支后将其删除。

 

通过以上分析可以发现,我们可以使用Git hook 脚本自动发布发布新的版本,具体就是每当有代码从develop分支合并到master分支的时候,脚本就会自动触发,编译发布新的版本。

支持分支

这些分支都是为了程序员协同开发,以及应对项目的各种需求而存在的。这些分支都是为了解决某一个具体的问题而设立,当这个问题解决后,代码会合并回主分支develop或者master后删除,一般我们会人为分出三种分支。

 

Feature branches:这种分支和我们程序员日常开发最为密切,称作功能分支。

必须从develop分支创建,完成后合并回develop分支

如下图所示:

 

具体事例可以参考上面王二狗完成登录注册功能时的做法。

Release branches:这个分支用来分布新版本。

从develop分支创建,完成后合并回develop与master分支。

这个分支上可以做一些非常小的bug修复,当然,你也可以禁止在这个分支做任何bug的修复工作,而只做版本发布的相关操作,例如设置版本号等操作,那样的话那些发现的小bug就必须放到下一个版本修复了。如果在这个分支上发现了大bug,那么也绝对不能在这个分支上改,需要Feature分支上改,走正常的流程。

 

实例:王二狗开发完了登录注册功能后决定发一个版本V0.1,那么他先从develop分支上创建一个Release 分支`release-v0.1`,然后二狗在这个分支上把版本号等做了修改。正准备编译发布了,项目经理说:“二狗啊,你那个登录框好像向右偏移量1个像素,你可以调一下吗?”二狗心中有暗暗骂道:日了个狗,但是。。。你们懂得,功能还的正常改。不过二狗发现这个bug特别小,对项目其他部分不造成不可预知的问题,所以直接在release分支上改了,然后愉快的发布了版本1.0.版本上线后,二狗将这个分支分别合并回了develop与master分支,然后删除了这个分支。

 

Hotfix branches:这个分支主要为修复线上特别紧急的bug准备的。

必须从**master**分支创建,完成后合并回**develop**与**master**分支。

如下图所示:

这个分支主要是解决线上版本的紧急bug修复的,例如突然版本V0.1上有一个致命bug,必须修复。那么我们就可以从master 分支上发布这个版本那个时间点 例如 tag v0.1(一般代码发布后会及时在master上打tag),来创建一个 `hotfix-v0.1.1`的分支,然后在这个分支上改bug,然后发布新的版本。最后将代码合并回develop与master分支。

 

实例:某天夜里二狗正在和女朋友嘿咻呢,突然项目经理打来电话:“二狗啊,线上出了个大问题,大量用户无法登录,客服电话已经被打爆了,你紧急处理一下”。二狗心中默默骂道:日了个狗,然后就爬起来去改代码了。二狗先找到master分支上**tag v0.1的地方,然后新建了`hotfix-v0.1.1` 分支,默默的修bug去了。经过一个多小时的奋战,终于修复了,然后二狗改了版本号,发布了新版本。二狗将这个分支分别合并回了develop与master分支后删除了这个分支。终于搞定了,回头看看床上的女票已经进入了梦乡,二狗贼心不死,上前挑逗,此刻女票将满腹怨气集于一点,使出凌空一脚将其登于床下,随后甩一枕于二狗,二狗会意,趋客厅,抱枕卧于沙发。。。

总结图

上面的讲解最后汇成一张图

 

总结

希望广大程序员不要有王二狗的遭遇,最后希望广大“王二狗媳妇”可以理解广大“王二狗”的苦衷。

标签:Git,develop,二狗,master,版本,实际,分支
From: https://www.cnblogs.com/R-bear/p/17797915.html

相关文章

  • 如何将本地代码上传到github远程仓库?
    在本地建立目录,将想上传的代码放到该文件夹中gitinit###初始化gitadd.###将本地项目工作区的所有文件添加到暂存区gitcommit-m"excu"###将暂存区的文件提交到本地仓库gitremoteaddoriginhttp://github.com/用户名/仓库名.git###将......
  • Git报错“no branch, rebasing master”
    本次出现这个错误是因为本地提交了commit但是未push成功,所以使用gitpull--rebase,由于远程仓库和本地的commit有冲突,Git无法自动解决冲突时,会切换到一个匿名分支,然后使用gitbranch发现报错“nobranch,rebasingmaster”。解决办法:在当前匿名分支下,解决完冲突,然后使用命令git......
  • GIT 分布式版本控制系统
    一、GIT分布式版本控制系统分布式版本控制,没有中央服务器的概念,每个人都有自己的版本库,因此每个人在工作时候,不需要联网,版本库本地即可管理。既然每个人都是一个完整的版本库,同事之间如果需要协作开发,就需要找一个用于“交换文件”的中央服务器,这个服务器不存在也不影响大家干......
  • Git 提交时提示 GPG 签名错误
    本来应该一切都是正常的,但今天提交的时候提示GPG签名错误。错误的信息就是GPG签名失败。 gpg:skipped"942395299055675C":Nosecretkeygpg:signingfailed:Nosecretkeyerror:gpgfailedtosignthedatafatal:failedtowritecommitobject  解决方案开始认......
  • B站C语言第五-六课——分支与循环语句
    1,分支语句#include<stdio.h>intmain(){ intage=100; if(age<18) printf("未成年\n"); elseif(age>=18&&age<28) printf("青年\n"); elseif(age>=28&&age<50) printf("壮年\n"); else......
  • 如何在Git仓库中查找并恢复已删除的文件?
    内容来自DOChttps://q.houxu6.top/?s=如何在Git仓库中查找并恢复已删除的文件?假设我在一个Git仓库中。我删除了一个文件并提交了更改。我继续工作并进行一些更多的提交。然后,我发现在删除该文件后需要恢复它。我知道可以使用gitcheckout<commit>--filename.txt来检出一......
  • EDA工具使用+GIT操作+python编程+C语言编程+Riscv相关+TCL操作
    EDA工具使用Verdi覆盖率转网页urg-full64-dirsimv.vdbVerdi加载sessionverdi-ssrsessionFileVcs分部编译额外选项-partcomp:自动分块编译。-fastpartcomp:使用多核计算系统并行部分编译。-pcmakeprof:查看每部分编译占用的时间,方便对时间更久的进行拆分。-partc......
  • git 常用指令 续四
    1.创建标签,查看标签//首先,切换到需要打标签的分支上gitbranchgitcheckout<branch_name>//然后创建标签gittag<name>gittagv1.0//查看所有标签gittag默认标签是打在最新提交的commit上的有时候,如果忘了打标签,可以找到历史提交的commitid,然后打上就可以了git......
  • git 常用指令 续三
    1.从远程库clone时,默认情况下,只能看到本地的main分支,若需要创建远程origin的dev分支到本地gitcheckout-bdevorigin/dev//创建本地dev分支和远程dev分支关联gitaddenv.txt//添加修改gitcommit-m"addenv"//提交修改gitpushorigindev//推送到远程origin的de......
  • git 常用指令 续二
    1.Git提供了一个stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作gitstash//储存工作现场gitstashlist//查看存储的列表2.工作现场还在,Git把stash内容存在某个地方了,需要恢复一下gitstashapply//恢复,但是恢复后,stash内容并不删除gitstashdro......