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
- 先获取所有tag
参考
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 公布!
发表回复