Gitworkflow
Gitworkflow is 指团队 in usingGitforversion控制时遵循 一套标准化流程, includingbranchmanagement, codesubmitting, code审查, merge策略etc.. 选择合适 workflow for 于improving团队协作efficiency, 保证codequality and 加速release流程至关 important .
1. Gitworkflow important 性
一个良 good Gitworkflow可以带来以 under good 处:
- improving协作efficiency: 明确 workflow程可以reducingteam members之间 communication成本, improving协作efficiency.
- 保证codequality: throughcode审查 and test流程, 可以确保merge to 主branch codequality.
- 加速release流程: 标准化 release流程可以加 fast 软件 release速度.
- 降 low risk: throughbranch隔离 and code审查, 可以降 low 引入bug risk.
- 便于追溯: 清晰 submittinghistory and branchstructure便于追溯issues and Understandcode演变.
- supportparallelDevelopment: 良 good branch策略support many 个functions parallelDevelopment.
2. common Gitworkflowmodel
目 before has many 种流行 Gitworkflowmodel, 每种model都 has 其Pros and Cons and 适用场景.
2.1 Git Flow
Git Flow is 由Vincent Driessen提出 一种经典 Gitworkflow, 它定义了严格 branchmodel, 适用于 has 明确version计划 project.
2.1.1 branchstructure
- master: 主branch, 只package含已release stable versioncode.
- develop: Developmentbranch, package含最 new Developmentcode, 所 has functionsbranch都 from developbranchcreation.
- feature/*: functionsbranch, 用于Development new functions, from developbranchcreation, completion after merge回developbranch.
- release/*: release准备branch, 用于准备releaseversion, from developbranchcreation, completion after merge回master and developbranch.
- hotfix/*: 热修复branch, 用于修复已releaseversion bug, from masterbranchcreation, completion after merge回master and developbranch.
2.1.2 workflow程
- from developbranchcreationfeaturebranchDevelopment new functions.
- functionsDevelopmentcompletion after , mergefeaturebranch回developbranch.
- 准备release时, from developbranchcreationreleasebranch.
- in releasebranch on fortest and bug修复.
- releasecompletion after , 将releasebranchmerge回master and developbranch, 并 in masterbranch on 打tag.
- such as果已releaseversion出现bug, from masterbranchcreationhotfixbranchfor修复.
- 修复completion after , 将hotfixbranchmerge回master and developbranch, 并 in masterbranch on 打tag.
2.1.3 Pros and Cons
优点:
- branchstructure清晰, 适合 big 型project.
- supportparallelDevelopment and versionmanagement.
- release流程规范, 便于management many 个version.
缺点:
- branchmanagement complex , 需要maintenance many 个 long 期branch.
- release周期较 long , 不适合continuous delivery.
- for 于 small 型project来说过于 complex .
2.1.4 适用场景
适合 has 明确version计划, release周期较 long big 型project, such as桌面application, 传统软件etc..
2.2 GitHub Flow
GitHub Flow is GitHub提出 一种 simple Gitworkflow, 它强调持续deployment, 适用于 fast 速iteration project.
2.2.1 branchstructure
- master: 主branch, 始终保持可deploymentstatus.
- feature/*: functionsbranch, 用于Development new functions or 修复bug, from masterbranchcreation, completion after throughPull Requestmerge回masterbranch.
2.2.2 workflow程
- from masterbranchcreationfeaturebranch.
- in featurebranch on forDevelopment, 频繁submitting.
- 将featurebranchpush to 远程仓library.
- creationPull Request, 邀请team membersforcode审查.
- 根据code审查意见formodify.
- 审查through after , 将featurebranchmerge回masterbranch.
- masterbranchmerge after 自动deployment.
2.2.3 Pros and Cons
优点:
- 流程 simple , 易于understanding and 执行.
- supportcontinuous delivery and fast 速iteration.
- 强调code审查, 保证codequality.
- branchmanagement simple , 只需要maintenancemasterbranch and 临时 featurebranch.
缺点:
- 不适合需要maintenance many 个version project.
- for test要求较 high , 需要 reliable automationtest.
- 不support complex release计划.
2.2.4 适用场景
适合 fast 速iteration, continuous delivery project, such asWebapplication, SaaS产品etc..
2.3 GitLab Flow
GitLab Flow is GitLab提出 一种workflow, 它结合了Git Flow and GitHub Flow 优点, supportcontinuous delivery and environmentbranch.
2.3.1 branchstructure
- master: 主branch, package含最 new Developmentcode.
- feature/*: functionsbranch, 用于Development new functions, from masterbranchcreation, completion after merge回masterbranch.
- environment/*: environmentbranch, such asstaging, production, 用于不同environment deployment.
- release/*: releasebranch, 用于准备releaseversion, from masterbranchcreation, completion after merge to environmentbranch.
2.3.2 workflow程
- from masterbranchcreationfeaturebranchDevelopment new functions.
- functionsDevelopmentcompletion after , mergefeaturebranch回masterbranch.
- 将masterbranchdeployment to testenvironmentfortest.
- testthrough after , 将masterbranchmerge to stagingenvironmentbranchfor预releasetest.
- 预releasetestthrough after , 将stagingbranchmerge to productionbranchfor正式release.
- for 于需要maintenance version, 可以creationreleasebranchformaintenance.
2.3.3 Pros and Cons
优点:
- supportcontinuous delivery and environmentmanagement.
- branchstructure清晰, 易于understanding.
- support many environmentdeployment.
- 适合各种规模 project.
缺点:
- 需要maintenanceenvironmentbranch, 增加了一定 complex 性.
- for 于 simple project可能过于 complex .
2.3.4 适用场景
适合需要 many environmentdeployment, continuous delivery project, such as企业application, moveapplicationetc..
2.4 Trunk-Based Development (TBD)
Trunk-Based Development is a强调频繁集成 Gitworkflow, 所 has Development者都直接 in 主branch on 工作 or creation short 期 functionsbranch.
2.4.1 branchstructure
- trunk: 主branch (通常命名 for master or main) , 所 has Development者都向这个branchsubmittingcode.
- short-lived feature branches: short 期functionsbranch, 生命周期不超过几天, 用于Development new functions, completion after 立即merge回trunkbranch.
2.4.2 workflow程
- from trunkbranchcreation short 期functionsbranch (生命周期不超过几天) .
- in functionsbranch on forDevelopment, 频繁submitting.
- 每天至 few merge一次 to trunkbranch, or usingPull Requestforcode审查.
- merge before 必须through所 has automationtest.
- trunkbranch始终保持可deploymentstatus.
- usingfeatures标志 (Feature Flags) 控制 new functions release.
2.4.3 Pros and Cons
优点:
- 集成频率 high , reducing了mergeconflict.
- branchmanagement simple , maintenance成本 low .
- supportcontinuous integration and continuous delivery.
- 便于 fast 速iteration and 反馈.
缺点:
- for automationtest要求极 high .
- 需要usingfeatures标志management未completion functions.
- 不适合需要 long 期Development big 型functions.
2.4.4 适用场景
适合需要 fast 速iteration, continuous integration/continuous delivery project, such as互联网产品, SaaSserviceetc..
3. workflow 选择因素
选择合适 Gitworkflow需要考虑以 under 因素:
- project规模: small 型project适合 simple workflow, such asGitHub Flow; big 型project适合更 complex workflow, such asGit Flow.
- 团队规模: 团队规模越 big , 越需要严格 workflow规范.
- release频率: release频率 high project适合GitHub Flow or Trunk-Based Development; release频率 low project适合Git Flow.
- versionmanagementrequirements: 需要maintenance many 个version project适合Git Flow; 不需要maintenance many 个version project适合GitHub Flow or Trunk-Based Development.
- testcapacity: automationtestcapacity强 project适合Trunk-Based Development; automationtestcapacity弱 project适合更保守 workflow.
- 团队文化: 团队更倾向于严格规范还 is flexibleiteration, 也会影响workflow 选择.
4. workflowbest practices
无论选择哪种workflow, 以 under best practices都 has 助于improving团队 协作efficiency and codequality:
- 频繁submitting: 每次submitting只package含一个逻辑 on 更改, 便于code审查 and rollback.
- 写清晰 submittinginformation: submittinginformation应该清晰, 简洁地describes本次submitting in 容.
- 定期synchronization: 定期 from 主branchpull最 new code, reducingmergeconflict.
- usingPull Request: throughPull Requestforcode审查, improvingcodequality.
- automationtest: configurationautomationtest, 确保merge to 主branch codethrough所 has test.
- continuous integration: usingCItool自动构建 and testcode.
- 保持主branch可deployment: 主branch应该始终保持可deploymentstatus, 便于随时release.
- delete过期branch: 及时delete不再需要 branch, 保持仓library整洁.
- usingfeatures标志: for 于未completion functions, usingfeatures标志formanagement, 避免阻塞release.
- 定期retrospective and improvement: 定期retrospectiveworkflow usingcircumstances, 根据practicalcircumstancesfor调整 and improvement.
实践case: usingGitHub FlowforDevelopment
- from masterbranchcreation一个 new featurebranch:
git checkout -b feature-login - in featurebranch on Developmentloginfunctions, 频繁submitting:
git add . && git submitting -m "Add login form" - 将featurebranchpush to 远程仓library:
git push -u origin feature-login - in GitHub/GitLab on creationPull Request, 邀请team membersforcode审查
- 根据code审查意见formodify, 并再次submitting:
git add . && git submitting -m "Fix login validation" && git push - 审查through after , 将featurebranchmerge to masterbranch
- delete本地 and 远程 featurebranch:
git branch -d feature-login && git push origin --delete feature-login - from masterbranchpull最 new code:
git checkout master && git pull
互动练习
请completion以 under 练习, 巩固Gitworkflow understanding:
- 选择一个你熟悉 project, analysis它适合using哪种Gitworkflow, 并说明原因.
- 根据GitHub Flow 流程, mock一个完整 functionsDevelopment过程, including:
- creationfeaturebranch
- for many 次submitting
- push to 远程仓library
- creationPull Request
- merge to masterbranch
- deletefeaturebranch
- 比较Git Flow and GitHub Flow Pros and Cons, 并说明它们各自适合 场景.
- 思考such as何 in Trunk-Based Developmentinmanagement一个需要 long 期Development big 型functions.
- 制定一份适合你团队 Gitworkflow规范, includingbranch命名, submitting规范, code审查流程etc..
completion练习 after , 你应该able to熟练Master不同Gitworkflow 特点 and 适用场景, 并able to选择适合自己project workflow!