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 公布!