Git Branch说明及Git Flow规范

Git Branch 分支综述

> 基于“开发/发布/缺陷分离”模型,结合开发阶段分配分支。主要包含master/develop/release/hotfix分支。

分支特性

Master Branch

1. 生产分支,又称Production Branch。

2. 该分支只接收最近发布到生产环境的分支。

3. 本分支**只能**从其他分支**合并**,**不能**直接**修改**提交代码。

4. 默认为保护分支,不可被删除。

5. 在该分支上打tag,一般Commit Message应为"merage From Release xxx"或"merage From Hotfix yyyy"这种自动生成的日志信息。

Develop Branch

1. 公共开发分支,又称主开发分支。

2. 该分支内包含即将发布的版本代码。

3. 代码来源主要为合并自master/feature分支的代码。

4. 该分支可以修改代码,作用是提供给所有feature分支合并使用,如Podfile。

5. 该分支跟踪于master分支,即主分支有代码变更(如hotfix代码),即主动合并至最新dev分支。

 Feature Branch

1. 功能分支,又称任务分支。

2. 该分支主要用来开发独立的一个功能,比如禅道上某个需求,或者某个模块的调整。

3. 该分支的作用是撇清各个开发任务并行不交叉,不用反复合并代码解决冲突。

4. 本分支来源于develop分支,完成开发后合并于develop分支。

5. 此分支上的pod可指定本地目录;但合并至develop时应指定Branch或commit Id。

Release Branch

1. 版本分支,又称提测分支。

2. 本分支的作用为合并当期需要发布的代码,并提交测试。

3. 本分支来源于develo分支,即在开发完成后提测时各个feature合并至develop之后最新merge的代码。

4. 本分支终结于通过测试即发布时,自动合并至master分支,并删除。

5. 此分支上的pod不能依赖本地目录,通过版本Tag指定或远端分支代码commit指定。

Hotfix Branch

1. 紧急修复分支

2. 该分支的作用为修复线上bug,即在正常的release迭代版本前插队发布的分支。

3. 该分支的来源为master分支,即线上最新代码。

4. 该版本的终点为master分支,在修复代码上线后合并主分支并删除此分支。

5. 如需要后续版本中保留此代码,则需要手动同步master代码到develop。

Git Flow 工作流

> 结合预设模版,组合指令,在不同开发阶段自动创建&合并分支。

正常软件开发周期为需求评审阶段/开发阶段/测试阶段/发布阶段。

对应的代码管理顺序为新建副本/开发代码/合并代码/修改代码/发布代码。

工作流

配置模版

初始化一组新的gitflow命令,主要是指派各个分支组名。

```

git flow init

```

```

同理sourceTree:

"顶部菜单"->"仓库/repository"->"gitflow或hg flow"->"初始化仓库"

```

开发新功能

需求评审阶段,当我们接到本阶段开发计划后会根据模块及需求拆分成任务。

```

git flow feature start [featureName]

```

```

同理SourceTree:

"选中当前feature分支"->"顶部菜单"->"仓库/repository"->"gitflow或hg flow"->"建立新的功能"

```

1. 首先我们会从先Checkout develop分支(实际只会操作一次)获取最新的团队代码。

2. 然后基于develop分支建立多个feature分支。

3. 分支命名为"需求编号_功能描述_作者"或"功能模块_描述_作者",如"**4396_blackFriday_wsc**"或"**feature/webview_deprecated_jgeng**" 。

4. 原则上只需要及时合并最新develop代码;如果需要依赖其他开发分支代码,手动操作即可。

完成新功能

需求开发阶段,当我们拿到项目排期后根据所属模块在各自feature分支开发即可;当功能开发完成后将合并至公共开发分支develop。

```

git flow feature finish [featureName]

```

```

同理SourceTree:

"选中当前feature分支"->"顶部菜单"->"仓库/repository"->"gitflow或hg flow"->"完成功能"

```

1. 首先在各自的任务分支上编写代码。

2. 然后拉取最新的develop分支代码并合并至自己的分支。

3. 解决冲突,保证++可以正常运行++,保证++podfile没有依赖本地代码++。

4. 点击完成功能,将自动合并当前feature代码至develop分支并删除此feature分支。

提交测试

> 到提测日的时候,各自任务分支代码应该已经开发完毕并完成自测。

此时代码仓库状态应该自动清理完所有当期提测的feature分支并自动合并至develop分支,负责本次版本发布的同学创建提测分支。

```

git flow release start [versionName]

```

```

同理SourceTree:

"选中当前feature分支"->"顶部菜单"->"仓库/repository"->"gitflow或hg flow"->"建立新的发布版本"

```

1. 首先我们要保证所有的提测分支应该已经合并至develop分支,ddl之后合并的即算延期。

2. 然后基于已经合并本期所有内容的develop新建release分支,此后develop分支得到解放,可以继续合并下个版本的feature分支。

3. 测试期间遇到bug将统一在release分支上修复;如担心存在经常性的合并冲突可自行新建bugfix分支并手动合并到此release分支。

4. 当开始测试后该release分支将与develop分支剥离主从关系,避免dev上有下期的代码也合并到本期release上。

5. 当本次版本通过测试后,即在最后一次commit上修改版本号并Archive&upload。

完成发布

需求评审阶段,当我们接到本阶段开发计划后会根据模块及需求拆分成任务。

```

git flow feature finish [versionName]

```

```

同理SourceTree:

"选中当前feature分支"->"顶部菜单"->"仓库/repository"->"gitflow或hg flow"->"完成版本发布"

```

1. 当本次版本通过审核后,点击完成。

2. gitflow会先将本次发布分支的代码合并到master分支,并标记tag。

3. gitflow将在合并完成后,自动同步最新的master代码到develop供下期开发的feature分支合并使用。

#### 紧急修复

需求评审阶段,当我们接到本阶段开发计划后会根据模块及需求拆分成任务。

```

git flow hotfix start [bugName]

git flow hotfix finish [bugName]

```

```

同理SourceTree:

"选中当前feature分支"->"顶部菜单"->"仓库/repository"->"gitflow或hg flow"->"建立新的修复补丁/完成修复补丁"

```

1. 当线上版本出现问题时,需要基于master分支新建hotfix分支。

2. 当完成修复后,gotflow将自动合并hotfix分支至master分支并标记tag。

3. 在合并完成后,gitflow将自动同步最新的master至develop分支。

Git flow 关于branch的管理



Git Rule Remarks

目的

git branch

1. 方便代码管理,在合适的时机合并分支

2. 及时清理不必要的分支

git commit log提交信息应当简明扼要,主要用途在于

1. git repo中查看回顾此文件经历的需求

2. Jenkins中对比两次构建之间的提交

3. 关心其他成员修改模块是否对自己代码产生影响

实践要求

分支命名采取责任制的形式 "描述 - 所属人"。具体有两种命名规则:

- 根据需求来,采取"需求编号_需求描述_责任人","4396_blackFriday_wsc"

- 根据功能来, 采取"功能模块_操作描述_责任人","webview_deprecated_lbw"

提交信息命名采取关键词的形式 "xx - details"。具体有两种命名规则:

- 根据增删改查件来,采取操作+文件的方式,"Add/Del/Fix - xx类/yy文件;

- 根据所设计的模块,采取功能+描述的方式,"Detail - 新增折扣标签"


## 补充内容

//清理本地repo占用磁盘过大

```

git gc --prune=now 

```

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,122评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,070评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,491评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,636评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,676评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,541评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,292评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,211评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,655评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,846评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,965评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,684评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,295评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,894评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,012评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,126评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,914评论 2 355

推荐阅读更多精彩内容

  • 1.git的安装 1.1 在Windows上安装Git msysgit是Windows版的Git,从https:/...
    落魂灬阅读 12,663评论 4 54
  • 参考资料 介绍一个成功的 Git 分支模型 Git分支管理策略 简介 规范的分支管理策略可以使得版本库的演进保持...
    水止云起阅读 939评论 0 0
  • 原文出处:涂根华的博客 一:Git是什么? Git是目前世界上最先进的分布式版本控制系统。 二:SVN与Git的最...
    挑战者666888阅读 4,491评论 6 27
  • 书名:《书都不会读你还想成功》 作者:二志成、郑会一(韩国) 时间:2017年1月7日 3小时 作图时间:0.5小时
    紫洋阅读 117评论 1 0
  • 有时总是心慌,总感觉自己在浪费生命。可是,每天毫无意义的忙碌,让我忘却了思考。只是,不停的苦干。做着每天重复的工作...
    f9f1de48dc41阅读 79评论 0 0