git及gitlab在项目开发中的实践应用一
更新:HHH   时间:2023-1-7


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


集中式和分布式

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


git工作区和缓存区

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


可能涉及到的操作。

  • 创建版本库

    git init(这个用到的很少)

  • 添加文件并且提交

    git add & git commit

  • 查看提交日志

    git log


gitlab远程仓库

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

git工作流

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

  • Git flow

  • Github flow

  • Gitlab flow

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

开发步骤说明:

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 remote add [remote_name] [remote_url] 即可添加一条通道,如上面的upstream(也可以起其他的名字)。这时你本地的仓库就对应两条通道了。


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

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


上线

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

常规上线流程

  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等扩展功能。


返回web开发教程...