git/gitlab在工作中的简单和进阶使用

GitLab使用详解:从入门到精通 通过本文的介绍,你应该已经掌握了GitLab的基本使用方法以及一些高级功能。GitLab不仅仅是一个代码托管平台,它还是一个功能强大的DevOps工具,可以大幅提升团队的协作效率和代码质量。通过不断学习和实践,你将能够更加灵活地使用GitLab,助力项目成功。希望这篇博文能帮助你更好地理解和使用GitLab,成为你在软件开发道路上的有力工具。如果你有任何问题或需要进一步的帮助,欢迎随时交流。 阅读详情

Git简单介绍

本篇不会介绍基本的git原理之类的,只记录在工作中的git使用经验。如果要学习git的基础与进阶,可以参考这个网站git-tower

本篇会简单介绍我在工作中都使用git做了哪些工作:

  • 基础使用。使用gitlab管理我们的源代码

  • 自动化。我们使用gitlab的CI进行自动代码检查、单元测试、代码打包

  • 多系统协作。我们使用gitlab的issue+webhook+钉钉作为简单的工单系统,支撑我们进行日常支撑工作

1. 管理源码进行开发

以下都以gitlab为例,所有开发人员使用同一个仓库,基于不同的特性分支进行开发

我们的分支:

  • master分支: 正式分支,也是打包分支

  • develop分支: 开发分支,保持和master分支保持一致

  • feature分支: 功能特性分支,不同的功能分别在对应的特性分支上进行开发测试。

我们的开发流程:

  • 建分支。建立特性/bug对应的issue,根据issue创建对应的分支(在web页面直接操作), 或者直接从develop分支迁出一个新的特性分支

  • 开发。在特性分支上进行开发/测试,直到测试验收完毕,每次提交都会触发局部静态代码检查

  • 合并前rebase并整理提交记录。分两步,先rebase develop保持特性分支为最新的develop代码,再rebase -i 变基commitid 整理特性分支的commit记录

  • 合并前code-review。在gitlab网页界面创建merge-request,并指派其他开发进行review,直到所有人都无异议,此时会触发全局静态代码检查。

  • 合并更新版本信息。研发主管将代码合并到develop分支后,在develop分支修改代码内的版本信息,再合并到master分支

  • 打包发布。研发主管基于master分支进行打tag,此时会触发CI自动基于tag打包。

这样,我们的一次功能需求的开发就算完成了。目前整个流程还存在一些问题:

  • 无法自动创建及更新CHANGELOG.md,即版本记录无法自动生成,跟我们的提交不规范有关系

  • 没法自动触发CD,跟我们的服务架构有关系。

2.基于gitlab的CI进行自动化代码检查、打包

gitlab如何搭建CI,此处不做赘述,查看官方文档即可。Runner部分教你如何搭建CI环境,CICD部分教你如何让CI运行起来

我们一共有4个任务: test,code_check_push,code_check_merge,feat_build,tag_build

  • test。执行单元测试代码,每次push时触发

  • code_check_push。执行局部静态代码检查,每次提交代码时触发,检查范围为提交的Py文件代码,且只检查Error级别的

  • code_check_merge。执行全局静态代码检查,创建merge-request后触发,检查范围为工程内的主要python包,只检查error级别的

  • feat_build。执行打包,每次push时触发,用于特性分支提测时配置

  • tag_build。执行打包,只有提交创建tag时触发,用于正式环境的打包。

3.基于webhook和issue+钉钉的简易工单系统

本系统涉及三个部分gitlab服务、钉钉服务、简单的中转服务

中转服务

为一个简单的http服务,用于接收gitlab内的issue相关变更的通知,并转发给钉钉机器人。

  • 创建一个转发接口api,将该api设置到gitlab的webhook部分即可接收gitlab的通知

  • 维护一个支持人员列表(转发钉钉时以对应手机号为准),收到gitlab通知时转发到钉钉时艾特对应的支持人员进行处理

gitlab服务

  • 建立一个公开的项目,用于接收issue,外部人员基于该项目的issue部分提交工单

  • 根据不同的业务类型,建立不同的工单模板,模板为markdown文件,需要放置于.gitlab/issue_templates/目录下,需要手动创建

  • 在该项目的webhook部分添加上述中转服务的接收通知的api,后续所有issue的变更(建立、更新、关闭)都会通知到该api

钉钉服务

  • 建立支持钉钉群,并添加webhook机器人,此机器人用于接收中转服务的通知

这样,一个简易的工单系统就建立起来了。外部人员建立issue反馈的时候,钉钉群内机器人就可以立马艾特对应支持人员进行处理,
处理完毕后在issue内同步结果信息,issue创建者会收到gitlab通知邮件

git常用场景

记录我理解的以及我使用的业务中场景的处理办法,如果有错误的或者有差异的还请指正

1、拉取远程项目的目标(如develop)分支

git clone 项目地址 项目下来通常只包含master分支,这个时候又不想使用git fetch all拉取所有分支下来,而只想拉取指定的分支。 可以使用

git checkout -b develop origin/develop

这样就切换到想要的分支了,并且已经拉取到了对应分支的代码

2、我需要为我的功能新建一个分支,并且同步到远程

方法1:创建分支并直接关联远程分支 git checkout -b new_branch origin/new_branch

方法2:先创建分支,先迁出新分支git checkout -b new_branch 再手动设置关联远程分支,手动设置远程分支也有两种方法

  • 第一种 git branch --set-upstream-to=origin/new_branch new_branch
  • 第二种 git push --set-upstream origin new_branch(远程分支名)

3、我在自己的feature分支进行开发,但是develop分支产生了改动,我需要更新下来

先在本地的develop拉取最新的远程develop代码 git pull origin develop

然后切回feature分支,直接针对develop分支进行rebase。git rebase develop

4、master版本为10,但是我想回退到版本9

执行git reset --hard 版本9的commit_id

前提是要提交未push到远程,否则本地再稍微修改生成一次新的提交git push --force

但是如果目标是受保护的分支,那么–force不生效

5、特性分支开发完毕后,删除掉该分支

先删除本地的分支 git branch -D feat/xxxx

再删除远程的分支 git push origin --delete feat/xxxx

6、根据commit log生成changelog

conventional-changelog,需要使用npm安装

7、git rebase之后,合并的提交其message不规范,需要重新修改message

执行git commit --amend

8、本地代码以及改的面目全非,拉取远程最新代码覆盖本地,且不合并冲突

先拉取远程所有代码 git fetch --all

再重置版本 git reset --hard origin/feature/当前分支

9、从某个tag分支上迁出新的分支进行开发

部分项目组可能未使用最新的tag进行研发,而是基于之前某个稳定版,此时添加紧急 特性时,需要从项目组使用的tag上迁出分支

git branch 新分支名 迁出tag版本

例如:git branch feature/add-new-feat v1.3.4 则会从1.3.4版本迁出分支

10、在本地临时切换到某个提交

执行git checkout $commit_id 。此时就可以切换到这次提交上,然后可以checkout回原分支,这么做可以定位某次提交是否出问题

11、CICD脚本里的一些操作

  • 获取当前分支名。git rev-parse --abbrev-ref HEAD

  • 获取当前分支最新的提交。git rev-parse HEAD

  • 获取最新版本的tag VERSION=git describe --abbrev=0 --tags

  • git 取得两个 tag 之间的 commit,用于生成版本更新的changelog。git log --pretty=oneline tagA...tagB > change.log

  • 获取倒数第二新的tag

    • 先获取所有tag git tag > tags.log

    • 获取所有tag数量 tags_num=awk 'END {print NR}' tags.log

    • 计算倒数第二个tag的行数 num= ( ( (( ((tags_num-1))

    • 取倒数第二行tag内容 latest_tag=sed -n $num'p' tags.log

参考

Commit message 和 Change log 编写指南-阮一峰
git-flow 的工作流程
git clone --mirror和git clone --bare之间的区别是什么
gogs迁移gitlab
手写git-hooks钩子
Git - 基于GitLab服务端、客户端钩子介绍
GitHub Actions 入门教程
hugo使用github action自动部署到github pages

Gitlab的使用(内含Git命令大全) gitlab使用流程标签(空格分隔): gitlab1、前言使用svn的同学抓(dan)狂(sui)的问题?没有网时候想commit怎么办?svn服务器宕机一天,技术团队抓狂,抱怨运维不给力非核心成员想贡献自己的力量却无论为力每每想看一下svn上的配置文件或者代码,不能在线看,必须下载。这尼玛能忍?顶你个肺的,不能直接下载,必须要要安装个小乌龟(svn客户端)。昨天那入职的新同事今天尽然离职了,仙... 阅读详情

相关推荐

Android Studio Git的使用-基于GitLab

Android Studio Git的使用-基于GitLab 公司最近开始使用Git管理代码,使用的是GitLab. 学习了GitLab的使用,以及Android Studio集成Git进行代码管理。 记录一下! 1.Android Studio集成Git AndroidStudio集成Git,Git官网下载Git,并进行安装。 安装完成后,AndroidStudio中,Fil

潜入海底的鱼 的博客 1万+

GitLab分支合并策略Fast-forward(快进)和Rebase(变基)的区别

gitlab合并策略

NQS__的博客 1213

Android Studio中使用Git——结合GitLab

命令中的 --global 参数表示你这台机器上所有的Git仓库都会使用这个配置。

2401_89285717的博客 1178

Git-代码合并时-rebase变基操作

Git-代码合并时-rebase变基操作

weixin_45502734的博客 2612

TM1621/HT1621 段码LCD驱动器

TM1621 LCD 驱动器

qq_45325304的博客 1万+

Unity游戏开发客户端面经——数据结构(初级)

Unity游戏开发客户端面经 之 数据结构篇

Sea3752的博客 1万+

git分支回滚合并变基等

本文讲解了使用idea或者命令,如何操作分支的每个细节

qq_44501608的博客 2299

马达种类全解析:VCM、Stepper、Piezo 在手机相机中的驱动原理与工程差异

在现代手机影像系统中,马达承担着核心成像组件的动态调节任务,如自动对焦(AF)、光学防抖(OIS)以及变焦调节。目前主流采用三类驱动器件:VCM(Voice Coil Motor)、Stepper(步进马达)、Piezo(压电马达)。不同马达方案在结构复杂度、响应速度、功耗、驱动方式与模组厚度适配等方面差异显著,对成像系统的性能表现有直接影响。本文将结合最新旗舰设备的应用现状,系统剖析这三类驱动马达的工作原理、架构特点与工程应用经验,为工程实践中选型与调试提供参考。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 3781

Git中的变基(Rebase)

在Git中,下载后运行变基通常是指使用git pull命令结合--rebase选项,从远程仓库获取最新的更新并将其应用到当前分支的操作。与默认的git pull不同,--rebase选项会将远程分支的更改应用到你的提交之下,以保持提交历史的线性。变基操作会将当前分支的提交“移植”到另一个基点上,这个基点通常是远程分支的最新提交。这种操作会重写提交历史,使其看起来像是从新的基点上直接进行的开发。

qq_41898196的博客 4131

笔试题-2023-紫光展锐-数字芯片设计【纯净题目版】

笔试题-2023-紫光展锐-数字芯片设计【纯净题目版】

w0shishabi的博客 2923

【PyGIS】ERA5降雨蒸散发数据预处理

ERA5-LAND降雨蒸散发数据预处理

```On Earth, Be Water, By Coding``` 3145

gitLab的使用 和 git 、 github、gitlab的区别

一、git 、 github、gitlab的区别 (百度相关内容得到的理解) 二、git最基本作用:版本控制 三、有集成了git的GIT安装包 github和gitlab都使用git该版本控制系统,来实现对代码的管理。 所以,原先怎么用git操作github的,那么用git操作gitlab是一样的。 https...

hellocsz的博客 3万+

【SAP ME 3】JAVA 调用SAP PO WebService

Java调用SAP PO/PI WebService接口

探索 Java 编程的技巧、最佳实践和解决方案。本博客提供针对 Java 开发者的实用指南,涵盖从基础到高级话题,旨在提升编程效率和技能。 847

GitLab的使用 和 Git 、 Github、Gitlab的区别

一、git 、 github、gitlab的区别 (百度相关内容得到的理解) 二、git最基本作用:版本控制 三、有集成了git的GIT安装包 github和gitlab都使用git该版本控制系统,来实现对代码的管理。 所以,原先怎么用git操作github的,那么用git操作gitlab是一样的。 https://git-scm.com/book/zh/v1/%E8%B5%B7%E6%AD%A5-%E5%AE%89%E8%A3%85-Git 三、 个人问了公司开发,并总结相

IChen.的博客 3万+

[Python] 如何使用 Python 调用 Dify 工作流服务实现自动化翻译

本文介绍了如何使用Python调用Dify的API实现文本翻译自动化。Dify作为AI开发平台,其工作流功能可执行文本处理、翻译等任务。选择Python调用Dify的优势在于职责划分清晰:Dify专注AI服务,Python处理文件操作等非AI任务。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 1097

ican项目四汽车零件智能测量

ican项目四汽车零件智能测量

weixin_72050316的博客 561

Gitlab及Git使用说明

GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务。GitLab由乌克兰程序员DmitriyZaporozhets和ValerySizov开发。

helloworldchina的博客 3086

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

使用Git拉取GitLab上的项目

一、先到官网下载git Git官网 点击安装,一路默认就好 二、配置Git 自己建一个空文件夹(存放项目),点击右键出现下面 点击GitBashHere出现下命令行的界面,与我们cmd命令窗口类似 1、配置本地仓账号和邮箱 $ git config --global user.name "Your Name" 【你的名字】 $ git config -...

hhh_ainihxh的博客 1万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

gitLab的使用 和 git 、 github、gitlab的区别

一、git 、 github、gitlab的区别  (百度相关内容得到的理解)   二、git最基本作用:版本控制   三、有集成了git的GIT安装包         github和gitlab都使用git该版本控制系统,来实现对代码的管理。         所以,原先怎么用git操作github的,那么用git操作gitlab是一样的。   https://...

Xiamen_XiaoHong的博客 1万+

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

git+gitlab的搭建以及使用

git remote add origin http://192.168.88.50/devops/myproject.git #关联远程项目。git config --global user.email mailto:mark@tedu.cn #设置用户邮箱。git config --global init.defaultBranch master #设置版本库默认分支。git push -u origin --all #推送本地仓库所有分支。

2401_86250043的博客 2416

git及gitlab的安装和使用

https://blog.youkuaiyun.com/qq_34964197/article/details/81104419

qq_34139393的博客 4038

GitLab 及 Git 使用学习

1.初始化Git2.远程建立连接3.拉取远程分支4.查看所有分支5.Push 代码生成密钥(pubilckey)ssh-keygen输入指令后一直点击回车,即可生成密钥(publickey)将id_rsa.pub中的内容复制到GitLab的SSH密钥对中,即可从GitLab上拉取或上传代码。6.上传到其他分支7.删除分支在Git中删除分支可以使用git branch命令配合-D或-d选项。以下是删除分支的几种常见方法:7.1.如果你想要删除一个已经合并到主分支的本地分支,可以使用-d这里。

一个bug是bug,多个bug能work 1697

Jenkins和GitLab的Git Flow

在工作中,我最近从TFS过渡到使用Git作为我们的源代码管理管理。 在将团队介绍给Git之后,我们还建立了一个通用的工作流程,说明如何使Git与Jenkins和GitLab集成。 以下是我们当前的实现。 Git分支策略 Git分支策略是有关如何在开发中使用git分支机制的指南。 建立这样的共享约定对于在团队中拥有共同的愿景特别有用,以便使每个人都朝着正确的方向发展。 有几种git分支...

danpu0978的博客 508

Git/GitLab的使用

git安装:从https://git-for-windows.github.io下载(网速慢的同学请移步国内镜像),然后按默认选项安装即可。 安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功! 或者鼠标右键出现Git Bash 图片.png gitLab设置:首先打开公司内网部署GitLab的服务器,由于是内部员...

xiaoman0743的博客 541
上一篇: docker常用命令入门
codeMore++
博客等级 码龄9年 6粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值