关于go:工作中对git的简单和进阶使用

Git简略介绍

本篇不会介绍根本的git原理之类的,只记录在工作中的git应用教训。如果要学习git的根底与进阶,能够参考这个网站git-tower

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

1、根底应用。应用gitlab治理咱们的源代码

2、自动化。咱们应用gitlab的CI进行主动代码查看、单元测试、代码打包

3、多零碎合作。咱们应用gitlab的issue+webhook+钉钉作为简略的工单零碎,撑持咱们进行日常撑持工作

1. 治理源码进行开发

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

咱们的分支:
1、 master分支: 正式分支,也是打包分支

2、develop分支: 开发分支,放弃和master分支保持一致

3、feature分支: 性能个性分支,不同的性能别离在对应的个性分支上进行开发测试。

咱们的开发流程:
1、 建分支。建设个性/bug对应的issue,依据issue创立对应的分支(在web页面间接操作), 或者间接从develop分支迁出一个新的个性分支

2、开发。在个性分支上进行开发/测试,直到测试验收结束,每次提交都会触发部分动态代码查看

3、合并前rebase并整顿提交记录。分两步,先rebase develop放弃个性分支为最新的develop代码,再rebase -i 变基commitid 整顿个性分支的commit记录

4、合并前code-review。在gitlab网页界面创立merge-request,并指派其余开发进行review,直到所有人都无异议,此时会触发全局动态代码查看。

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

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

这样,咱们的一次性能需要的开发就算实现了。目前整个流程还存在一些问题:
1、无奈主动创立及更新CHANGELOG.md,即版本记录无奈主动生成,跟咱们的提交不标准有关系

2、没法主动触发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

本文由博客一文多发平台 OpenWrite 公布!

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理