Git 版本化管理(从功能开发、发布到 bug 修复)

序言

Git 的使用已经越来越广泛了,Git 的好处这边也就不多说了,主要还是说一下使用向的东西,项目开发过程中也会遇到各种各样的问题,这边就把我遇到问题及解决的方式分享下:

我的使用场景是 Git+ GitLab

经典 Git 分支图

下面就这张图给大家说下 Git开发->发布->Bug 修复 的流程。

image

常规开发流程

作为一个资深的偷懒码农,我选择 oh-my-zshgit alias

  • 首先你需要有一个开发分支(devdevelop),需要开发新功能的时候,从开发分支切一个新分支出来进行开发:
# common
$ git checkout -b [branch]

# zsh
$ gcb [branch]
  • 部分模块完成,将当前目录的所有文件添加到暂存区,准备提交:
# common
$ git add .

# zsh
$ ga .
# common
$ git commit -m <message>

# zsh
$ gcmsg <message>

养成模块开发,分步提交的好习惯,尽量避免让代码 Review 的人一次看几千行代码。

  • 提交到远程仓库:
# common
$ git push [remote] [branch]

# zsh
$ ggp
  • 提交 PR 准备合并:

image

指定版本 Label,指定好分支,个人习惯,合并后之前的分支会删掉。

  • 解决冲突,多人协作会涉及到同一个模块这是不可避免的,当你代码合并出现 conflict 就说明冲突了,操作流程如下:
  1. 切到 dev 分支,拉下最新的代码:
# common
$ git checkout dev && git pull

# zsh
$ gco dev && gl
  1. 切回自己的分支:
# common
$ git checkout [branch]

# zsh
$ gco [branch]
  1. 本地合并:
# common
$ git merge dev

# zsh
$ gm dev
  1. 解决冲突,选择最优解代码,两边代码都有问题的话就手动改正,提交。

发布流程

  • dev 分支切出一个新的 release 分支:
# common
$ git checkout -b [release-X.X.X]

# zsh
$ gcb [release-X.X.X]
  • release-X.X.X 合并到 master 分支:

image

  • 切到 master 分支(主分支:用于线上部署),拉最新的代码:
# common
$ git checkout master && git pull

# zsh
$ gcb master && gl
  • tag 进行版本更新, Makefile 示例(个人使用 standard-version):
.PHONY: server build version

registry=example.registry.com
version=`git describe --tags`

server:
	@hexo clean \
	    && hexo g \
	    && hexo s

version:
	@echo "build new version..." \
		&& standard-version \
		&& git push --follow-tags origin master

deployment: version
	@echo "build docker image for origin ..." \
	    && hexo clean \
		&& hexo g \
		&& docker build -t $(registry)/allens-blog/blog:$(version) . \
		&& sudo docker push $(registry)/allens-blog/blog:$(version)

Bug 修复流程

  • 先从发布版本的 release 分支切一个 fix 分支进行 bug 修复:
# common
$ git checkout release-X.X.X && git pull && git checkout -b fix_release_somebug

# zsh
$ gco release-X.X.X && gl && gcb fix_release_somebug
  • 添加代码到暂存区(同上)
  • 提交到本地仓库(同上)
  • 提交到远程仓库(同上)
  • 代码合并到 release-X.X.X
  • 测试 OK,将合并 cherry-pickmaster
  • 别忘记将合并 cherry-pickdev,不然下次从 dev 切 release 的时候 Bug 又出现了
  • 重新走一遍发布流程

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!