Gitflow开发者使用指导
Developer大部分时间是在dev分支上为当前的版本开发feature,进入到Release Candidate阶段后提交bug fix,Hotfix阶段提交bug fix。下文分别讲述这三个阶段Developer应该如何使用Git遵循Gitflow进行团队协作。另外补充一下初始化本地仓库操作,merge conflict的解决,同步代码。
初始化本地仓库
克隆仓库到本地
git clone ssh://url/xxx.git
开发阶段
为当前版本(sdk_v1.1)开发feature
# 切换到dev分支
git checkout dev
# 同步dev分支
git fetch -p --all
git pull -r
# 检出feature分支
git checkout -b feature/v1.1/JIRA-671/add_xx_func
# 开发,本地提交
# 推送feature branch到Gitlab
git push origin feature/v1.1/JIRA-671/add_xx_func
# Gitlab上提交merge request,请求合并入dev分支
# 请求被合并后可以删除本地分支(根据个人需要)
git checkout dev
git branch -d feature/v1.1JIRA-671/add_xx_func
发布候选阶段
为当前版本(sdk_v1.1)进行Bug Fix
# 同步远程仓库
git fetch -p --all
# 检出发布候选分支
git checkout -b sdk_v1.1_rc origin/sdk_v1.1_rc
# 检出feature分支
git checkout -b f_release/v1.1/JIRA-673/fix_xx
# 进行Bug Fix,本地提交
# 推送feautre branch到Gitlab
git push origin f_release/v1.1/JIRA-673/fix_xx
# Gitlab上提交merge request,请求合并入sdk_v1.1_rc分支
# 请求被合并后可以删除本地分支(根据个人需要)
git checkout sdk_v1.1_rc
git branch -d f_release/v1.1/JIRA-671/fix_xx
热修复阶段
为当前发布版本(sdk_v1.1.1_release)进行Bug Fix
# 同步远程仓库
git fetch -p --all
# 检出热修复分支
git checkout -b hotfix_v1.1.2 origin/hotfix_v1.1.2
# 检出feature分支
git checkout -b f_hotfix/v1.1.2/JIRA-680/fix_xx
# 进行Bug Fix,本地提交
# 推送feature branch到Gitlab
git push origin f_hotfix/v1.1.2/JIRA-680/fix_xx
# Gitlab上提交merge request,请求合并入hotfix_v1.1.2分支
# 请求被合并后可以删除本地分支(根据个人需要)
git checkout hotfix_v1.1.2
git branch -d f_hotfix/v1.1.2/JIRA-680/fix_xx
解决合并冲突
当多个开发者同时进行推送的时候可能会发生merge conflict,以dev分支上的merge conflict为例,讲述应该如何处理。
Maintainer在合并请求时发现merge conflict,应该close当前的合并请求,删除feature branch,并通知Developer重新修改后推送。Developer可以按以下流程在本地进行conflict fix:
# 检出dev分支
git checkout dev
# 同步dev分支
git fetch -p --all
git pull -r
# 在最新的dev分支上对feature branch进行变基,conflict fix
git rebase dev feature/v1.1/JIRA-675/add_func_xx
# 解决变基过程中的冲突后,重新推送feature branch
git push origin feature/v1.1/JIRA-675/add_func_xx
# Gitlab上提交merge request,请求合并入dev分支
# 请求被合并后可以删除本地分支(根据个人需要)
git checkout dev
git branch -d feature/v1.1/JIRA-675/add_func_xx
同步代码
每次开发(或Bug Fix)前,建议同步一次代码;最好在推送前再同步一下,避免merge conflict。
以在dev分支上进行开发为例:
开发前同步:
# 检出dev分支
git checkout dev
# 同步dev分支
# “-p”:删除远端不存在的refspec,“--all”: fetch所有的远端分支
# “-r”:以变基的形式进行merge(将远程分支merge到当前所在分支),这样本地分远程的分支历史线性一致
git fetch -p --all
git pull -r
# 此时再检出feature branch
git checkout -b feature/v1.1/JIRA-678/add_func_xx
推送前同步:
# 检出dev分支
git checkout dev
# 同步dev分支
# “-p”:删除远端不存在的refspec,“--all”: fetch所有的远端分支
# “-r”:以变基的形式进行merge(将远程分支merge到当前所在分支),这样本地分远程的分支历史线性一致
git fetch -p --all
git pull -r
# 在最新的dev分支上对feature branch进行变基,如果有conflict,进行fix
git rebase dev feature/v1.1/JIRA-678/add_func_xx
# 此时进行推送
git push origin feature/v1.1/JIRA-678/add_func_xx