Git项目管理

2019-12-04 18:25:59 语法专题 3856 0

大致流程


图 001

权限介绍

分支规范

代码只允许增量修改
不允许强制提交

主分支

命名

master

权限

该项目的管理者

新功能分支

命名

研发者名称 + / + 分支性质 + / + 功能名【单词之间以下划线分隔】 + _ + 年月日时分

研发者名称

使用该分支的研发人员的英文名或者中文拼音
yuntianhe

分支性质

feature 新功能的分支
hotfix 线上问题修复的分支

yuntianhe/feature/oauth2_optimise_201911051146  
yuntianhe/hotfix/fixbug_of_oauth2_optimise_201911051150  
权限

该项目的管理者、开发者

身份管理

比如我当前公司项目的开发目录,如下

www-data@online:~/site$ ls
admin.puppeteer.hlzblog.top  api_iot.hlzblog.top  mall.hlzblog.top  puppeteer.hlzblog.top  secrect.hlzblog.top  www.hlzblog.top

需要对该目录下的所有git项目设置身份为自己在公司的职员信息
考虑会引入新的项目
所以我在这里写了一个批量更新脚本auto_git_config.sh

#!/bin/bash

echo "---------正在配置目录git用户信息---------"

user_name="云天河" # TODO 自己在公司内的名称
user_email="yuntianhe@staff.hlzblog.top" # TODO 自己在公司内的邮箱

for dir in $(ls ./)
do
  #echo "当前 ${dir} ---"
  if [ -d $dir"/.git" ];then
        # 进入目录
        cd $dir
        # 配置公司内的 git
        git config user.name ${user_name}   # 配置git 用户名
        git config user.email ${user_email}  # 配置git 邮箱
        # 返回上层
        echo "配置项目\t${dir}"
        cd ..
  fi
done

echo "---------配置结束---------"

将其放到对应目录下

www-data@online:~/site$ ls
auto_git_config.sh  admin.puppeteer.hlzblog.top  api_iot.hlzblog.top  mall.hlzblog.top  puppeteer.hlzblog.top  secrect.hlzblog.top  www.hlzblog.top

执行这个脚本即可
结果如下

www-data@online:~/site$ sh ./auto_git_config.sh 
---------正在配置目录git用户信息---------
配置项目        admin.puppeteer.hlzblog.top
配置项目        api_iot.hlzblog.top
配置项目        mall.hlzblog.top
配置项目        puppeteer.hlzblog.top
配置项目        secrect.hlzblog.top
配置项目        www.hlzblog.top
---------配置结束---------

分支创建流程

Step 1

依据分支规范创建一个远程功能分支,如

yuntianhe/feature/oauth2_optimise_201911051146

推送的前提是
产品线负责人已经允许你推送这个分支了
是不允许随便上传线上的分支的
推送到云端
命令示例

git fetch
git checkout -b yuntianhe/feature/oauth2_optimise_201911051146 origin/master
git push origin yuntianhe/feature/oauth2_optimise_201911051146

Step 2

创建本地研发分支
此分支不允许推到线上
仅供本地研发用
命令示例

git fetch
git checkout -b local-yuntianhe/feature/oauth2_optimise_201911051146 origin/yuntianhe/feature/oauth2_optimise_201911051146

Step 3

每次在local-yuntianhe/feature/oauth2_optimise_201911051146开发完一部分功能后

a.准备写注释前,需要先检查一遍本次的改动文件有没错了的

git status

b.仔细看看本次的改动细节

git diff

如果你不小心先执行了 git add -A 了,那就使用

git diff HEAD

如果发现有部分不想带上去的代码也被 git add -A 了 你可以通过

git reset HEAD

回到 git add 前的代码状态

c.确认了本次变动后,加入版本注释

git add -A
git commit -m '这里是注释内容'

如果注释内容比较多,可以执行 git commit -a 进入编辑器
关于编辑器的选择,可以进行配置为 vi 或者 vim

git config core.editor "vim"

Step 4

合并这部分功能,到功能分支,推送到云端

git fetch
git checkout yuntianhe/feature/oauth2_optimise_201911051146
git merge origin/yuntianhe/feature/oauth2_optimise_201911051146
git merge local-yuntianhe/feature/oauth2_optimise_201911051146
git push origin  yuntianhe/feature/oauth2_optimise_201911051146

研发完成后,先自测功能,然后准备打包给测试同学

Step 5

首先明白什么是打包
打包就是让人容易记住的有意义的名字
它跟某个commit号绑在一起

环境术语

常见的几套环境及其释义,如,图 002

图 002

本次我们主要涉及 testproduction 环境

打包流程

测试包

研发同学交付到测试同学的包
用于测试( test)环境

命名

test_ + 年月日时分

test_201910091315
查看包

查看当前所有打过的包及其备注

git fetch
git tag -ln
打包
git tag test_201910091315
删除本地包
git tag -d test_201910091315
推送为远程包
git push origin test_201910091315
删除远程包
git push origin --delete test_201910091315 
测试环境使用

测试同学把包拉到测试环境使用

git fetch
git checkout  test_201910091315 

线上包

测试同学交付到产品线负责人的包
用于预发布(pre)环境或者生产(production)环境的包

命名

online_ + 年月日时分

online_201910091445

运维同学书写自动化发布脚本时使用

git fetch
git checkout  online_201910091445 

其他包命名


图 003

用log查看tag

为了方便我们通过 git log 查看版本号
我们需要全局配置一下

git config --global log.decorate true
注意事项

如果发现上线的包有问题
可以尝试立马切换到上一个没有问题的包上去

如果好几个包都有问题
而且这些包都是后端同学的包
我们应该对有问题的代码部分
做接口暂停访问的相关处理

代码追责

如果有一个BUG测试同学没有测试到
但是已经上线了一段时间了
对公司收入造成了一定影响
这时候就会追责了

BUG场景

有一个优化券兑换码,为了方便测试,可以被无限使用,然后被带到了线上
我们去看看代码里面是谁加的这几行代码

定位代码

例如: 我们经过代码追溯
查看到文件app/Http/Controllers/Operation/CouponApiController.php被人改过
然后我们通过 git blame 文件路径

git blame app/Http/Controllers/Operation/CouponApiController.php

翻到对应的行数就可以指定那几行代码是谁改的了

图 004

注:若无特殊说明,文章均为云天河原创,请尊重作者劳动成果,转载前请一定要注明出处