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

描述

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

经典 Git 分支图

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

常规开发流程

我习惯使用 oh-my-zsh 去使用 Git,主要是因为他的 git alias 可以连 git 关键字都缩写成 g

  • 首先你需要有一个开发分支(devdevelopdevelop.v1),需要开发新功能的时候,从开发分支切一个新分支出来进行开发:
    1
    2
    3
    4
    5
    # 常规 bash
    git checkout -b [branch]

    # oh-my-zsh
    gcb [branch]
  • 部分模块完成,将当前目录的所有文件添加到暂存区,准备提交
    1
    2
    3
    4
    5
    # 常规 bash
    git add .

    # oh-my-zsh
    ga .
  • 功能开发完成,提交到本地仓库(commit message 的格式可以参考阮一峰的网络日志

    如果是多人开发并且有代码 Review 的话,尽量养成模块开发,分步提交的好习惯,用以避免让代码 Review 的人一次看几千行代码。

  • 提交到远程仓库
    1
    2
    3
    4
    5
    # 常规 bash
    git push [remote] [branch]

    # oh-my-zsh
    ggp
  • 提交到远程仓库
    1
    2
    3
    4
    5
    # 常规 bash
    git push [remote] [branch]

    # zsh
    ggp
  • 分支合并
    1
    2
    3
    4
    5
    6
    7
    # 常规 bash
    git checkout dev
    git merge [function branch]

    # oh-my-zsh
    gco dev
    gm [function branch]
  • 解决冲突(多人开发难以避免)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    # 1.拉dev 分支最新的代码
    # 常规 bash
    git checkout dev && git pull
    # oh-my-zsh
    gco dev && gl

    # 2.切回自己的分支
    # 常规 bash
    git checkout [function branch]
    # oh-my-zsh
    gco [function branch]

    # 3.本地合并
    # 常规 bash
    git merge dev
    # oh-my-zsh
    gm dev

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

发布流程

  • 从 dev 分支切出一个新的 release 分支
    1
    2
    3
    4
    5
    # 常规 bash
    $ git checkout -b [release-X.X.X]

    # oh-my-zsh
    $ gcb [release-X.X.X]
  • release-X.X.X 合并到 master 分支
    1
    2
    3
    4
    5
    6
    7
    # 常规 bash
    git checkout master
    git merge [release branch]

    # oh-my-zsh
    gco master
    gm [release branch]
  • tag 进行版本更新, Makefile 示例(个人使用 standard-version
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    .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 修复
    1
    2
    3
    4
    5
    # 常规 bash
    git checkout release-X.X.X && git pull && git checkout -b fix_release_somebug

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

Git 版本化管理(从功能开发、发布到 bug 修复)
https://agopher.com/2020/09/13/tech/2020-git/
作者
冷宇生(Allen)
发布于
2020年9月13日
许可协议