刚进公司,不懂GIt工作流的我瑟瑟发抖
前言
不懂git工作流,被辞退了!
之前在看到这句话的时候,我刚实习入职不久,瑟瑟发抖。好巧不巧,今天又看到了类似的文章讲git重要性的。
眼下,学校导师安排给我的课题组了一个新的工程项目,使用gitee维护,因此我打算写一篇文章总结一下git的工作流(git工作流就是指单人/多人团队如何使用git命令配合维护一个项目的一些约定的流程,在确保有效迭代的同时,保持高效的协作方式),相信可以帮助那些使用git停留在单人维护远程master
分支的同学更进一步。
下面会讲解四种git工作流中的前两种,无论是在校课题组还是公司内部,都可以以此为基础找到合适的git团队工作模式。
Centralized Workflow 集中式工作流
介绍
三个开发人员共同维护一份远程仓库的代码,工作方式如下:
每次工作前从
remote
拉取master
分支到本地的master
分支,然后处理冲突(使用IDE自带的GUI图形用户界面处理冲突会比较方便,如图中的goland内置的git工具)接着开始编码,编码完成后
add
修改的文件到缓冲区commit
缓冲区文件到自己local
仓库,并且push
本地仓库文件到remote
仓库
评价
集中式工作流:这种工作方式简单粗暴,所有人只使用master
分支维护项目,master
永远是项目最新版本,编码比较快,立竿见影。但是所有开发者提交日志集中在一起呈单线延伸,难以定位问题,分工不明确,且容易发生冲突,处理冲突成本上升,但是单人开发很便利。
Feature Branch Workflow 功能分支工作流
介绍
功能分支工作流以集中式工作流为基础,在维护master
分支的基础上,将项目的开发工作拆分为添加一个个的feature
的形式,工作方式如下:
一旦需要开发新的功能,就在
remote
的master
分支的基础上创建一个feature xxx
分支本地创建对应的
feature xxx
分支每次开发前将
remote库
的feature xxx
分支拉取到本地,处理冲突然后在本地
feature xxx
分支上开发,然后push
到remote的feature xxx
分支在项目主页上发起
pull request
(如果是gitlab则是merge request
,作用相同),本意是提出将feature xxx
分支合并入master
分支的请求然后你的代码会被review,没通过就本地改,改完之后继续
push
到remote
(两头都在feature xxx分支),然后负责人继续review你这个PR或者MR,通过之后会将feature xxx
分支区别于master的改动合并入master
,删除remote的feature xxx
分支,代表这个功能开发完毕
评价
功能分支工作流:这种工作方式带来了code review
的功能,使得推送的代码更符合规范,减少bug产生。并且因为主要还是在master分支基础上根据功能需求创建feature分支,使得开发工作十分灵活,且各个功能之间隔离,但是对于大型项目而言需要为不同分支分配更加具体的角色,只有feature分支是不够的。
Gitflow Workflow
介绍
Gitflow工作流是我目前尚在熟悉的一种工作流,也是目前非常成熟的git工作流方案。区别于功能分支工作流,Gitflow工作流划分分支更有约束性。主要包括:
- 主分支master:用于跟踪项目正式发布的版本(tag标签号)
- 开发分支dev:用于跟踪代码研发的提交历史
- 功能研发分支feature:每次有新的功能需要研发,以
dev
分支为基础,建立feature
分支,开发完成后按上面feature branch工作流的方式提交PR/MR到remote的dev
分支,完成之后删除对应feature
分支 - 热修复分支hotfix:如上图所示,
master
分支出现bug(线上报bug了),需要马上从master拉取一个hotfix
分支处理修复bug,并且将代码合并到master和dev
(这两个分支需要保持bug修复的一致性),修复后给master当前提交打一个tag(v0.2)
- 发布分支release:在
dev
基础上建立release
分支,处理一些问题、修复一些bug之后,将代码合并入master与dev
,并给master打上tag(v1.0)
表示发布完成
评价
约束性更强,发布迭代流程更规范,严谨,开发人员分工更明确,十分推荐学习使用。
Forking Workflow
介绍
这种工作流是开源项目维护的工作流,暂作了解即可,通过将他人的项目fork
到自己的remote
仓库,就可以将其作为自己拥有的一份副本进行开发,比如想增加一个功能或者修复一个bug。这里A与C都fork
了B的仓库,在各自开发完成新功能之后可以提交PR
给B仓库,B仓库的开发者负责review
代码,并接受PR。
评价
具体还未尝试过提交PR给开源项目,但是相信在掌握了上述三个git工作流之后,以后要使用到forking工作流的问题也应该引刃而解。
结束
学习了四种git工作流之后,并不是要完全照搬某一个模式的所有使用流程,而是应该结合实际的项目规模和人员规模进行合理安排。比如对于校内课题组较小的项目我认为feature branch
工作流应该足以胜任,或者使用只有master
、dev
、feature
的简化版Gitflow工作流。
我是白泽,一个有点逗比的程序员/学生党,咱们下期见。
欢迎大家关注公众号【程序员白泽】。
刚建了个微信小群,欢迎一起交流学习,备战秋招。
刚进公司,不懂GIt工作流的我瑟瑟发抖的更多相关文章
- PHP新手必学之刚进公司装环境
由于今天去一家公司做项目,又重新的装了一遍所熟悉的PHP环境,所以记录下来,总结下. PHP环境主要: PHPstudy(apache+mysql+php)+phpstorm+navicate 解释: ...
- 开发环境之git:团队协作git工作流与常用命令
此篇文章只是一篇傻瓜式的,记录工作中比较规范且常见的一个git工作流需要用到的命令,让你可以快速的开始工作.而不是一些长篇大论的理论知识,如果你有用过sourcetree或者其它图形化工具,结合你正在 ...
- Git工作流总结
引用自:https://github.com/xirong/my-git/blob/master/git-workflow-tutorial.md 说明: 个人在学习Git工作流的过程中,从原有的 S ...
- [转]深入理解学习GIT工作流
深入理解学习Git工作流 字数13437 阅读2761 评论3 喜欢70 个人在学习git工作流的过程中,从原有的 SVN 模式很难完全理解git的协作模式,直到有一天我看到了下面的文章,好多遗留在心 ...
- 深入理解学习Git工作流(转)
个人在学习git工作流的过程中,从原有的 SVN 模式很难完全理解git的协作模式,直到有一天我看到了下面的文章,好多遗留在心中的困惑迎刃而解,于是我将这部分资料进行整理放到了github上,欢迎st ...
- 深入理解学习Git工作流(git-workflow-tutorial)
转载:https://segmentfault.com/a/1190000002918123#articleHeader11 人在学习git工作流的过程中,从原有的 SVN 模式很难完全理解git的协 ...
- 深入学习 Git 工作流
原文 https://github.com/xirong/my-git/blob/master/git-workflow-tutorial.md 个人在学习git工作流的过程中,从原有的 SVN ...
- git 工作流介绍
GIT Git工作流你可以理解为工作中团队成员遵守的一种代码管理方案,在Git中有以下几种工作流方案作为方案指导: 集中式工作流 功能开发工作流 Gitflow工作流 Forking工作流 下面针对性 ...
- Git 工作流的正确打开方式
前言 一直在使用git做版本控制,也一直工作很顺利,直到和别人发生冲突的时候.这才注意到git 工作流并不是那么简单.比如,之前遇到的清理历史.百度到的资料很多,重复性也很多,但实践性操作很少,我很难 ...
随机推荐
- Mysql中不能update自身的解决方法
不能执行:update bi_data.order_all_detailset err_msg='同时存在于wx,zfb平台',proc_time=now()where order_no in( se ...
- Linux启动、停止宝塔
启动 /etc/init.d/bt start 停止 /etc/init.d/bt stop
- JS监控浏览器窗口是否活动,最小化操作
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- LocalDate转换成Date
LocalDate nowLocalDate = LocalDate.now(); Date date = Date.from(nowLocalDate.atStartOfDay(ZoneOffset ...
- TempCache 临时内存缓存器
TempCache.h /* *************************************************** * Copyright(c) Xiamen AutoNavi Co ...
- 【九度OJ】题目1109:连通图 解题报告
[九度OJ]题目1109:连通图 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1109 题目描述: 给定一个无向图和其中的 ...
- 【LeetCode】3. Longest Substring Without Repeating Characters 无重复字符的最长子串
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 公众号:负雪明烛 本文关键词:无重复字符,最长子串,题解,leetcode, 力扣,py ...
- A. Points on Line
A. Points on Line time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...
- 来自Java程序员的Python新手入门小结
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- RocketMQ 消息丢失场景分析及如何解决
生产者产生消息发送给RocketMQ RocketMQ接收到了消息之后,必然需要存到磁盘中,否则断电或宕机之后会造成数据的丢失 消费者从RocketMQ中获取消息消费,消费成功之后,整个流程结束 1. ...