git及gitlab在项目开发中的实践应用一
admin
2023-01-19 11:41:56
0

之前总结过一篇关于git入门的文章,这几天心血来潮,结合我在手机微博开发团队中实际经验谈一谈git在工作中的应用吧。


集中式和分布式

git与之前的svn相比,主要体现在集中式和分布式的区别。集中式主要依托于中央服务器,开发人员从中央服务器获得最新的代码,开发完成后再提交到中央服务器,脱离了中央服务器,基本上服务就不行了。而分布式版本管理系统在本地都有一个仓库,可以不依赖中央服务器进行开发提交代码,在需要往远端合并的时候才进行。

git及gitlab在项目开发中的实践应用一


git工作区和缓存区

git在本地工作的工作状态如下所示,对于新添加/更新的文件只有通过git add添加到缓存区,然后通过git commit才能提交到仓库中。

git及gitlab在项目开发中的实践应用一


可能涉及到的操作。

  • 创建版本库

    git init(这个用到的很少)

  • 添加文件并且提交

    git add & git commit

  • 查看提交日志

    git log


gitlab远程仓库

因为内部商业代码,所以我们没有托管到github,这里使用和gitlhub相似的gitlab作为远程仓库,我们使用的社区版,虽然比商业版少了些功能,但基本上是够用的。关于软件的安装我们这里就不做介绍了,周期性的会随着gitlab的发布而更新。

git及gitlab在项目开发中的实践应用一

git工作流

网上介绍工作流的文章也很多,大致分成下面三种:

  • Git flow

  • Github flow

  • Gitlab flow

感觉根据项目的实际情况都略有差别。我们的工作流采取如下方式:

git及gitlab在项目开发中的实践应用一

开发步骤说明:

1. project fork

我们的项目一般都隶属于项目组,日常开发先把主仓库fork到自己的空间下。

2. git clone

通过git clone把自己远程仓库上的项目代码clone到自己本地目录。

3. git branch & git checkout 

创建分支并且切换到分支上面,我们的所有的功能都是基于分支进行开发的,每次有新的功能或者对代码进行改进的时候,我们都会创建一个新的分支进行开发。

4. git add & git commit

有更新或者添加的代码,我们执行git add和git commit 提交到自己本地仓库。

5. git pull 

即上图中的步骤5,同步代码,开发功能的时候创建分支开始时,线上的代码也是往前走的,功能开发完,代码可能落后于master的代码,这时就需要进行同步到最新的代码,检查你的功能代码是否有代码冲突。

6. git push

这一步是把代码推送到远端仓库上。

7. create merge request

当接到产品或者业务测试的邮件,确定可以上线的时候,创建个merge request,这时代码就可以进入到待合并状态,如果是常规上线,之后由专人进行合并,QA回归测试,然后上线。


git remote

上面的工作流中涉及到远程仓库的信息,如:git pull,你的代码是通过你的远程仓库拷贝的,为什么可以从远程项目组仓库进行代码同步呢,在这里说下git remote相关的内容。

我们执行git remote -v 会看到一条通道信息,这个是你本地仓库到远程仓库的通道,origin是它的名字。

git及gitlab在项目开发中的实践应用一

然后我们通过git remote add [remote_name] [remote_url] 即可添加一条通道,如上面的upstream(也可以起其他的名字)。这时你本地的仓库就对应两条通道了。

git及gitlab在项目开发中的实践应用一


其中upstream是不可以直接push代码的,仅用于同步代码。

git pull upstream master即从远程master上同步最新的代码。


上线

我们之前采用的如下图方式进行上线。

git及gitlab在项目开发中的实践应用一

常规上线流程

  1. 一条基准线master,master上面的代码都是上线最新的代码,所有人都通过master更新同步代码。

  2. 在某个时间点,比如今天的11点吧(个人推荐11:00左右上线,即上午上线),如果测试没有问题,此时基于master创建个上线的tag,我们命名为release.0722.0,然后把它推上线。

  3. 稳定之后,我们进行下一个版本的准备,此时基于master创建一个分支branch,比如:online.0723.0。

  4. 然后将准备在0723.0上线的merge request都合并到这个分支上面。然后创建QA回归测试tag 如candidate.0722.0,然后把这个测试tag推到仿真机器上测试。

  5. 当QA测试没有问题后,会给开发测试邮件,此时我们会把上述online.0723.0的代码合并到master上,然后基于master打出一个最新的常规上线包如release.0723.0上线,此时也确保master上面是最新的代码。

  6. 如此反复,进入下一阶段的常规上线循环。


紧急上线流程

对于紧急上线流程的情况,我们这里还是十分常见的,比如紧急修复bug,紧急功能上线等情况。

紧急上线必然有紧急的流程应对,首先,这个需求必须领导知道的。然后业务方测试没有问题,在确认没有问题的情况下,这部分代码是直接合并到master上,如图中步骤6,然后基于最新的master代码创建tag,如release.0723.1,然后上线。这个地方其实可以加上一个emergency标识,告诉大家这个上线是个紧急上线。


好了,关于git和gitlab的基本功能就到这里了,下一篇文章我们介绍下git hooks和gitlab hooks以及gitlabCI等扩展功能。


上一篇:PHP 生成 Trie 树

下一篇:session相关知识

相关内容

热门资讯

新任中国驻阿联酋大使赴机场为回... 【环球时报-环球网报道 记者 张志文】3月7日,新任中国驻阿联酋大使曾继新抵阿后即赴迪拜国际机场为搭...
全国人大代表雷军:京津冀联建国... 新京报讯(记者曹晶瑞)“以科技创新加快引领新质生产力,是时代赋予我们这代人的使命,民营企业更要敢为人...
特朗普说结束伊朗战争后“古巴只... 特朗普3月5号下午说,结束伊朗战争之后,古巴只是时间问题,他此番表态背后真实目的又是什么?对此,国际...
realme暂停新机研发?官方... PChome 3月7日消息,一则 “realme疑似暂停2026年全新手机产品研发” 的消息在微博快...
对话高通执行副总裁:很快发布X... 智东西 作者 | ZeR0 编辑 | 漠影 智东西3月6日报道,在MWC 2026期间,高通执行副总...
2026年网络准入控制系统最新... 老吴的科技公司刚熬过业务扩张期,就栽了个大跟头。 上周一上班,全公司内网突然瘫痪,核心业务系统无法登...
张凯丽委员:禁止未成年用网的封... 3月5日上午9时,十四届全国人大四次会议在人民大会堂开幕,国务院总理李强作政府工作报告,其中提到“加...
诚信氧舱工厂十大排行:哪家口碑... 在特种医疗设备领域,氧舱类产品的技术门槛与安全性要求极高。根据IDC 2023年发布的医疗设备智能化...
三部法律案提请审议,标注中国立... 新华社北京3月7日电 题:三部法律案提请审议,标注中国立法新刻度新华社记者刘硕、齐雷杰立法,关乎国家...
媒体:不理旧账,不配为官 作者:何涛3月6日上午,十四届全国人大四次会议辽宁省代表团举行全体会议,并向中外媒体开放。会上,辽宁...