大话 Git 工作流

2015-12-28 10:47:23 +08:00
 CodingNET
> 原文: https://blog.coding.net/blog/git-workflow
> 作者:[wzw@Coding]( https://blog.coding.net/author/wzw)

深圳的秋天,比全国大多数地方都来得更晚。在经过忽冷忽热的挣扎中,天气渐渐转凉。
这天是周末,晚上天气凉爽,小刘,小李,小高,小陈四个人,约好一起来撸串。他们是大学同学,学的是计算机,毕业后都到了深圳,目前都以写程序为生,加入了程序员大军。

程序员的聚餐节目是固定的,几口大腰子下去,再加上几杯啤酒下肚,几个人不约而同的开始各种吐槽,从骂老板,骂上司,骂产品,骂设计,骂到最后,大家都懂。所谓的程序员的聊天以骂老板开始,以撕编程语言结束。

但是今天他们又开了一个新的话题,那就是代码托管的工作流。

小刘率先发言, git 这货 跟 svn 没啥差别,我一贯还是按照以往的,写完了就提交,我们三五个人的小团队也都这样,除了可以在本地不连服务器上也能提交代码这点之外,跟 svn 没啥差别,我们就只有一个主分支跟 svn 的主干是一样的,大家都在这上面工作,团队协作沟通非常高效。


### 小刘所讲的工作流 -- Centralized Workflow

![图片]( https://dn-coding-net-production-pp.qbox.me/feebbee4-43de-487d-bedb-cc12a1e7c91e.png)

这套流程讲究的就是快速,简单,这对于大多数个人开发者和小型团队来说是最好的选择,往往是维护一个 App ,个人博客,或者一个小型网站之类的。总结下来适用场景和基本特点是:

1. 团队人数少
2. 开发不是很频繁
3. 团队沟通方便
4. 不需同时维护多个版本

继续说回我们的故事。
小陈听不下去了,说道:我们团队都推行使用一个 git 的插件,叫做 git-flow , 所有成员,都按照这个软件规定的标准流程进行协作,每次改动,我们都根据不同的情形,使用 git-flow 工具来新建相应的流程。大家都按照这个流程来,虽然繁琐,但是我们三十几个开发团队共同维护几个项目,从来都是运行平稳,从未出事,就你们那几个人三天两头代码库被新手搞乱,居然还好意思叫团队协作沟通高效?我看是搞笑吧,哈哈。

小刘气的脸通红,又没啥话好说,只好忍了。

### 小陈所讲的工作流 -- Git-flow Workflow

![图片]( https://dn-coding-net-production-pp.qbox.me/b84291d9-e16d-4af0-9149-2ae6faeea134.png)

这套工作流讲究的是平稳,有序, Git-flow 工作流在 Git 分支标签等概念的基础上,添加了一些 Feature , Release , Hotfix 等概念,用以精确描述代码版本控制的一些流程,所有协作者在放弃一些个人效率的基础上,统一开发流程,最终带来的是整体的规模化的团队的整体效率提升。其缺点是上手较难一点,需要一些基础知识培训,适用场景如下:

1. 认为额外学习 Git-Flow 不是什么问题的
2. 有专门的代码仓库管理员的
3. 开发团队相对固定,而且有一定规模
4. 常常有并行开发需求
5. 团队对于 Release , Bug , Feature 这些概念有统一定义标准的

继续说回我们的故事。
这时小李淡定的拿出一串羊肉,吃了一口,说道:我不知道你们说的是什么玩意,但是我作为一个自由职业者,维护着一个开源软件,平时也给一些开源软件贡献些代码,从来都是 Github 上 fork 完了,再提交 Pull Request 的, Pull Request 会被开源软件的维护者评审,如果评审通过,就会合并到源项目。我作为一个开源软件的维护者,既评审着别人给我的贡献,也贡献给别人评审,这是一个非常理想的生态循环,我不知道你们扯那些破玩意有啥用。

### 小李所讲工作流 -- Fork Workflow

![图片]( https://dn-coding-net-production-pp.qbox.me/0d3c05db-1ee9-430b-973e-f370ccd0b97e.png)

这套流程是专门为开源软件量身打造的一套流程,最早的发明者是 Github , Github 是世界知名开源软件仓库。这个流程的最大特点就是,开发参与者可以不直接参与到项目中来,想贡献代码,只要 fork 目标项目后,就可以得到一个一模一样的自有项目,做完修改后,提交 Pull Request 给原项目,如原项目的维护者采纳了,即算贡献完成。图中看一看到,每个开发者(团队)都拥有自己维护的一个项目,跟别人项目之间的联系通过 Pull Request 形式解决。总结下来适用场景是:

1. 常用于开源软件
2. 开发者有需要衍生出自己的衍生版的
3. 开发者不固定,可能是任意一个网友

继续说回我们的故事。
小高是个胖子,每次撸串最能吃,基本上聊天的时候都是偶尔插一句话。但是这时候,听完这一顿撕,也忍不了了,用纸巾擦掉嘴上的辣椒说道:我们公司,跟你们选择的都不同,我们公司使用基于 git-flow 简化的一个模型来协同工作,不需要安装什么 git 插件。版本库有一个默认分支 master ,需要 release 的时候,就将默认分支打一个标签,用作 release 。使用 Coding 提供的保护分支功能, master 指定若干管理员,其他人有任何修改都在默认分支 master 的基础上新开分支,提交代码,然后到 Coding 上向 master 提交合并请求,并可以指定若干团队成员作为评审者,评审通过后就可以合并到 master 上了。也从来都运转平稳,从未出事。


### 小高所讲工作流 -- Feature Branch Workflow

![图片]( https://dn-coding-net-production-pp.qbox.me/a60eb8f5-330d-4c2f-a347-ac47dba0e440.png)

这套流程属于 Git-Flow 的简化版,不再需要安装额外 Git 插件,基于代码托管平台提供的一些基础功能来实现,主要流程分 Feature 流程和 Bug 流程。这个流程是适用于大多数团队人数在 5 人以上,有很多并行开发需求,切更新频繁,开发任务重的协作团队。其适用场景是:

1. 开发团队相对固定,而且有一定规模
2. 常常有多个功能,多个问题并行开发
3. 对代码审查有较高要求
4. 更注重团队效率


小刘,这时才从小陈的话中缓过神来,对小陈说道,我们虽然是出过新手搞乱了代码库的问题,但是 git 都是有历史的,并非不可恢复,关键是我们流程简便,从来有任何问题都是快速响应,不像有些公司,修个 bug ,居然要等一周才能上线。

小李又说道,有啥好吵,都是没啥卵用的玩意,你就按照 fork / pull request 来搞就行了。

你一句,我一句,七嘴八舌的,吵得不可开交。
。。。。。。

这四位的争论越来越激烈,没办法,程序员的争论都是撕破脸皮,面红耳赤,直至烧烤店快要打烊了。最后惊动了烧烤店的老板娘。老板娘听罢争论,笑眯眯的走过来说:年轻人莫要激动,我虽然不知道讲什么,但这世间万物,都有适用范围,没有什么是绝对好的,也没有什么是绝对坏的。就好比你们吃烧烤的辣椒,放在这烤肉上,味道就非常不错,但是你见过哪家冷饮店放辣椒的么?

几人听完,瞬间觉得卫生阿姨就好比金庸小说扫地僧那般神奇,细思恐极,赶紧结了账,匆匆离开了。

============ 这是分割线 ============


是啊,没什么是绝对好的,也没什么是绝对坏的,每样东西都有适用范围。

以上,适用场景并不定死,是灵活多变的,甚至于我们可以超出以上四种模型,取其精华,弃其糟粕,自己创造出新的模型来。总之,希望这篇文章能帮助你找到属于符合自己的模型的 git 工作流。
4775 次点击
所在节点    分享发现
17 条回复
xingshu
2015-12-28 11:00:30 +08:00
coding 加了很多社交的。。
movtoy
2015-12-28 11:35:11 +08:00
所谓的程序员的聊天以骂老板开始,以撕编程语言结束。

看看 V2EX ,说的还挺对的。。
sunjourney
2015-12-28 12:12:00 +08:00
请问这个作图工具是什么啊
gordonFreeman
2015-12-28 12:38:11 +08:00
PandaChen
2015-12-28 13:59:24 +08:00
感觉像是 coding 推广,不过有意思
aheadlead
2015-12-28 14:05:44 +08:00
'''
这四位的争论越来越激烈,没办法,程序员的争论都是撕破脸皮,面红耳赤,直至烧烤店快要打烊了。最后惊动了烧烤店的老板娘。老板娘听罢争论,笑眯眯的走过来说:年轻人莫要激动,我虽然不知道讲什么,但这世间万物,都有适用范围,没有什么是绝对好的,也没有什么是绝对坏的。就好比你们吃烧烤的辣椒,放在这烤肉上,味道就非常不错,但是你见过哪家冷饮店放辣椒的么?

几人听完,瞬间觉得卫生阿姨就好比金庸小说扫地僧那般神奇,细思恐极,赶紧结了账,匆匆离开了。
'''

老板娘 --> 卫生阿姨

虽然有时候是同一个人,但是总觉得好像有点不对


文章赞一个
greycell
2015-12-28 14:41:25 +08:00
@gordonFreeman 刚想回这个~
qinenqiang
2015-12-28 15:58:42 +08:00
文章不错,赞一个!
h1029306
2015-12-30 11:41:05 +08:00
+1 同问这图是咋画的?
imlonghao
2016-01-20 19:44:36 +08:00
这是我第三次看这篇文章
Andy1999
2016-01-21 00:32:16 +08:00
然后您还是没学会发图吗
aiden4
2016-01-21 09:08:36 +08:00
jiehuangwei
2016-01-21 18:53:47 +08:00
文笔不错,可以去写小说了。不过细节不够深入,简述了个大概轮廓,赞!
codeyung
2016-02-27 12:17:34 +08:00
@h1029306 有向无环图
hansnow
2016-02-27 12:30:42 +08:00
老板娘和卫生阿姨是啥关系?
Khlieb
2016-02-28 16:42:59 +08:00
@PandaChen 策划文案的人也很 6
yx30
2016-03-05 08:16:02 +08:00
好文,赞一个

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/246603

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX