# Git 工作流管理 Git 使用规范 ![](media/Git工作流管理1.jpg) ## 研发阶段 共享版本库在 http://git.businessmatics.io/gogs,我们通过 GitLab(开源)搭建了 git 版本库管理平台; 在每个项目中,会有一个常设的 master 分支,该分支作为每个项目的开发主干,一般来说,主干上的代码都应该保持干净,可用,尽量跟线上版本一致; 上图显示了在我们选用的 git flow 工作流; 接到一个新的项目需求,第一步的工作是创建一个特性分支(feature),分支的命名规则一般1~2个单词,不要使用缩写,尽可能保持字面意思,让别人看懂,分支需要被推送到中央版本库; 主要负责该需求的程序员在该分支上开发,谨记经常提交代码,确保代码不要遗失,如果有共同合作人,应该尽可能频繁地把变更推送到中央版本库,确保合作人能尽可能早地知道你的变化; 应该至少每天同步(sync)一次主干的变化,方法是在你的分支下,首先执行git fetch将远程代码下载到本地,然后执行git merge master或者git rebase master,(推荐后者,可以产生线性的提交历史,不强制); 特性开发完毕后,提交代码到中央版本库,commit message按照规范关联需求,测试平台会自动生成对应的测试任务,辅助以提测邮件自动通知测试进行测试; ## 测试到发布 测试对分支进行测试和集成测试; 分支测试完毕后,开发人员将分支提交merge request到主干,由系统的研发负责人进行一次code review并同意合并主干。因为merge会产生一个commit,强制留痕,可以帮助我们记住一个特性分支是何时添加到主干的; 一旦一个分支合并入主干后,约定分支不会被再次使用,如果该分支合并主干后有bug,则重新拉取分支进行修复; 测试对此时的主干进行回归测试; 测试完毕后(包括修完bug),测试或开发(优先由测试操作)对master打tag,并完成发布; ## Feature发布后 合并主干或发布完成后,如果突然出现了紧急运营问题或者bug,应该从最新的主干分支创建分支,分支命名规则为quickfix开头; 在quickfix分支上修复bug,完毕后,紧急验证; 验证完毕后,将quickfix分支合并master分支打tag,并发布线上; 发布完毕后,quickfix_feature1分支不再重复使用; ## 研发全流程 定期清理中央仓库分支 定期清理中央仓库Tag ## git命令 ### 清理所有旧分支 ```shell git branch --merged origin/master | egrep -v "(^\*|master|dev)" | xargs git branch -d git branch -r --merged origin/master | egrep -v "(^\*|master|dev)" | sed -e 's/origin\///g' | xargs -n 1 git push origin --delete git fetch -p ``` ### 清理本地已经合并到master分支的无用分支 ``` git branch --merged origin/master | egrep -v "(^\*|master|dev)" | xargs git branch -d ``` ### 清理远程已经合并到master分支的无用分支 ```shell git branch -r --merged origin/master | egrep -v "(^\*|master|dev)" | sed -e 's/origin\///g' | xargs -n 1 git push origin --delete ``` ### 如果远程分支已经被删除,则清理本地的分支追踪. ``` shell git fetch -p ```