[2025-06-30] 添加Git分支管理规范
Some checks failed
Publish to Confluence / confluence (push) Failing after 21s

This commit is contained in:
liuxiaohua 2025-06-30 15:02:35 +08:00
parent 6dda62521e
commit aa396a3a49
2 changed files with 780 additions and 0 deletions

View File

@ -0,0 +1,327 @@
<!-- Space: qifu -->
<!-- Parent: 后端技术&知识&规范 -->
<!-- Parent: 技术方案 -->
<!-- Parent: 基建 -->
<!-- Parent: 00-基础组件 -->
<!-- Title: 20250627-Git分支管理规范修订版 -->
<!-- Macro: :anchor\((.*)\):
Template: ac:anchor
Anchor: ${1} -->
<!-- Macro: \!\[.*\]\((.+)\)\<\!\-\- width=(.*) \-\-\>
Template: ac:image
Url: ${1}
Width: ${2} -->
<!-- Macro: \<\!\-\- :toc: \-\-\>
Template: ac:toc
Printable: 'false'
MinLevel: 2
MaxLevel: 4 -->
<!-- Include: 杂项/声明文件.md -->
<!-- :toc: -->
# 20250627-Git分支管理规范修订版
## 分支策略概述
- 本规范基于 GitFlow 工作流,结合公司一些实际情况。规范明确了分支类型、使用场景、操作流程及权限控制。
- 支持多团队,多迭代并行开发
- 多迭代通过 `develop/xxx` 区分
- 多团队通过 `feature/xxx` 区分
![](https://picture.texous.cn/blog/20250630122310545.png)
## 分支类型与用途
### 1. 主分支 (master)
- **作用**:生产环境代码,存放稳定可发布的版本
- **保护规则**
- 禁止直接 push
- 只接受来自 release 或 hotfix 分支的 Merge Request
- 至少需要 2 个代码审查批准才能合并
- 每次合并自动触发版本标签X.Y.Z
### 2. 项目迭代分支 (develop/xxx)
- **命名规范**`develop/<date>-<迭代标识>` (如 `develop/20250601-s14`)
- **创建方式**:从 master 分支切出
- **作用**:单个项目/迭代周期的开发主线
- **生命周期**
- 创建:迭代启动时
- 删除保留10个历史迭代
- **合并规则**
- 接受来自 feature/xxx 分支的 Merge Request
### 3. 功能分支 (feature/xxx)
- **命名规范**`feature/<date>-<功能描述>` (如 `feature/20250603-user-auth`)
- **创建方式**:从 develop/xxx 分支切出
- **作用**:单个功能/模块的开发
- **生命周期**
- 创建:功能开发开始时
- 删除:功能发布到预发环境后
- **操作规范**
- 每天至少 rebase 一次 develop/xxx 分支
- 功能完成并通过自测后发起 Merge Request
### 4. 发布分支 (release/xxx)
- **命名规范**`release/<date>-<版本号>` (如 `release/20250625-1.2.0`)
- **创建方式**:从 master 分支切出
- **作用**:版本发布准备
- **操作流程**
1. 从 master 切出 release 分支
2. 合并对应 develop/xxx 分支
3. 进行预发布测试和修复
4. 合并到 uat 分支进行用户验收测试
5. 测试通过后合并到 master
- **保护规则**
- 只接受来自 develop/xxx 的 Merge Request
- 只能合并到 master 和 uat
### 5. 热修复分支hotfix/xxx
- **命名规范**`hotfix/<date>-<问题描述>` (如 `hotfix/20250630-payment-bug`)
- **创建方式**:从 master 分支切出
- **作用**:线上问题修复
- **操作流程**
1. 从 master 切出 hotfix 分支
2. 进行BUG修复
3. 提交 Merge Request
4. 修复后合并到 develop/xxx 分支
- **保护规则**
- 只能合并到 master 和 develop/xxx
### 6. 环境部署分支
| 分支类型 | 分支名 | 环境 | 更新来源 | 自动部署规则 |
|-------|---------|-------|------------------|--------------|
| 开发环境 | develop | 开发环境 | develop/xxx 合并 | 每次 push 自动部署 |
| 测试环境 | test | 测试环境 | develop/xxx 分支合并 | 每次 push 自动部署 |
| UAT环境 | uat | UAT环境 | release/xxx 合并 | 手动触发部署 |
## 工作流程详解
### 新功能开发流程
![](https://picture.texous.cn/blog/20250630140742061.png)
### 提测流程
![](https://picture.texous.cn/blog/20250630140857246.png)
### 版本发布流程
![](https://picture.texous.cn/blog/20250630140930403.png)
### 热修复流程
![](https://picture.texous.cn/blog/20250630141021309.png)
## 分支命名规范
| 分支类型 | 命名模式 | 示例 |
|--------|--------------------------------|-------------------------------------|
| 项目迭代分支 | `develop/<date>-s<storyid>` | `develop/20250601-s14` |
| 功能分支 | `feature/<date>-<description>` | `feat/20250603-user-authentication` |
| 发布分支 | `release/<date>-<version>` | `release/20250625-1.2.0` |
| 热修复分支 | `hotfix/<date>-<issue>` | `hotfix/20250630-login-error` |
## 权限控制
### Git 仓库权限矩阵
| 操作 | 开发者 | 技术主管 | 运维工程师 |
|-------------------|-----|------|-------|
| 创建 feature/xxx 分支 | ✓ | ✓ | ✗ |
| 合并到 develop/xxx | ✗ | ✓ | ✗ |
| 创建 release/xxx 分支 | ✗ | ✓ | ✓ |
| 合并到 master | ✗ | ✓ | ✓ |
| 创建 hotfix 分支 | ✗ | ✓ | ✓ |
| 删除分支 | ✗ | ✓ | ✓ |
### Merge Request 规则
1. **最小审批人数**
- feature → develop/xxx1人主R
- develop/xxx → release/xxx1人主R
- release/xxx → master2人含1名运维暂由主R执行
- hotfix/xxx → master2人含1名运维暂由主R执行
- hotfix/xxx → develop/xxx: 1人主R
2. **必需检查**
- 所有测试用例通过
- 代码覆盖率不低于 80%
- 静态代码分析无严重问题
- 无合并冲突
## CI/CD 集成规范
### 流水线触发规则
| 分支类型 | 触发动作 | 执行任务 | 是否实现 |
|-------------|---------------|-----------------|------|
| feature/xxx | push | 单元测试、代码扫描 | ✗ |
| develop/xxx | merge request | 集成测试、Docker 构建 | ✗ |
| develop | push | 部署开发环境、API 文档生成 | ✗ |
| test | push | 部署测试环境、自动化测试 | ✗ |
| release/xxx | push | 预发布构建、安全扫描 | ✗ |
| uat | merge request | 部署UAT环境、性能测试 | ✗ |
| master | merge request | 生产构建、部署生产、版本标记 | ✗ |
| hotfix/xxx | push | 紧急测试套件、快速部署检查 | ✗ |
---
## 最佳实践
### <font color="red">建议用图形界工具面操作分支</font>
- IDEA
- SOURCETREE
- 小乌龟
- Gitkraken
### 1. 分支管理
- 使用 `git fetch --prune` 定期清理本地缓存
- 删除已合并的分支:`git branch --merged | grep -v master | xargs git branch -d`
- 使用交互式 rebase 清理提交历史:`git rebase -i HEAD~5`
### 2. 提交规范
- 遵循 Conventional Commits 规范:
```
<类型> [<时间>]: <描述>
[可选 正文]
[可选 脚注]
```
- 类型可参考https://gitmoji.js.org/
- IDEA插件推荐Open Gitmoji
示例:
```bash
git commit -m "✨ [2025-06-01]: add OAuth2 support
- Implement Wework OAuth2 provider
- Add token refresh mechanism
Closes #123"
```
或者
```bash
git commit -m ":sparkles: [2025-06-01]: add OAuth2 support
- Implement Wework OAuth2 provider
- Add token refresh mechanism
Closes #123"
```
### 3. 版本管理
- 主版本 (Major):不兼容的 API 修改
- 次版本 (Minor):向下兼容的功能新增
- 修订号 (Patch):向下兼容的问题修正
#### 使用语义化版本标签:
```bash
git tag -a 1.2.3 -m "Release sso module"
git push origin 1.2.3
```
### 4. 冲突解决
#### 优先在功能分支解决:
```bash
git checkout feature/xxx
git fetch origin
git rebase origin/develop/xxx
#- 解决冲突
git rebase --continue
```
#### 建议用工具解决冲突
- idea
- vscode
- sourcetree
- 小乌龟
- 等等
## 附录:常用命令参考
### 分支操作
```bash
#- 创建迭代分支
git checkout -b develop/20260601-s14 master
#- 创建功能分支
git checkout -b feature/20260603-user-auth develop/20260601-s14
#- 每日同步
git fetch origin
git rebase origin/develop/20260601-s14
#- 提交变更
git add .
git commit -m "✨ [2025-06-01]: add OAuth2 support"
#- 推送功能分支
git push -u origin feature/20260603-user-auth
#- 清理分支
git branch -d feature/20260603-user-auth
```
### 发布操作
```bash
#- 创建发布分支
git checkout -b release/20250625-1.2.0 master
#- 合并开发分支
git merge --no-ff develop/20260601-s14
#- 解决冲突并提交
git add .
git commit -m "Merge develop/20260601-s14 into release/20250625-1.2.0"
#- 测试后合并到master
git checkout master
git merge --no-ff release/20250625-1.2.0
git tag -a 1.2.0 -m "Release 1.2.0"
```
### 热修复
```bash
#- 创建热修复分支
git checkout -b hotfix/20250630-login-error master
#- 修复问题并提交
git add .
git commit -m "🐛 [2025-06-30]: 修复用户数据为空引起的空指针异常"
#- 测试后合并到master
git checkout master
git merge --no-ff hotfix/20250630-login-error
git tag -a 1.2.1 -m "Hotfix for login issue"
#- 合并到develop
git checkout develop/xxx
git merge --no-ff hotfix/20250630-login-error
#- 清理
git branch -d hotfix/20250630-login-error
```

View File

@ -0,0 +1,453 @@
<mxfile host="Electron" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/25.0.2 Chrome/128.0.6613.186 Electron/32.2.5 Safari/537.36" version="25.0.2">
<diagram id="yPxyJZ8AM_hMuL3Unpa9" name="complex gitflow">
<mxGraphModel dx="2440" dy="1407" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1100" pageHeight="850" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-57" value="" style="endArrow=none;html=1;rounded=0;strokeWidth=3;strokeColor=#B3B3B3;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="222" y="613.5" as="sourcePoint" />
<mxPoint x="1502" y="613.5" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-56" value="" style="endArrow=none;html=1;rounded=0;strokeWidth=3;strokeColor=#B3B3B3;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="222" y="554.5" as="sourcePoint" />
<mxPoint x="1502" y="554.5" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-54" value="" style="endArrow=none;html=1;rounded=0;strokeWidth=3;strokeColor=#B3B3B3;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="220" y="499.5" as="sourcePoint" />
<mxPoint x="1500" y="499.5" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-53" value="" style="endArrow=none;html=1;rounded=0;strokeWidth=3;strokeColor=#B3B3B3;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="220" y="445.5" as="sourcePoint" />
<mxPoint x="1500" y="445.5" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-52" value="" style="endArrow=none;html=1;rounded=0;strokeWidth=3;strokeColor=#B3B3B3;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="220" y="385.5" as="sourcePoint" />
<mxPoint x="1500" y="385.5" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-51" value="" style="endArrow=none;html=1;rounded=0;strokeWidth=3;strokeColor=#B3B3B3;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="221" y="333.5" as="sourcePoint" />
<mxPoint x="1501" y="333.5" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-47" value="" style="endArrow=none;html=1;rounded=0;strokeWidth=3;strokeColor=#B3B3B3;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="220" y="210" as="sourcePoint" />
<mxPoint x="1500" y="210" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="uWUnNED6HEl2aK5fdaIb-10" value="" style="verticalLabelPosition=bottom;verticalAlign=top;html=1;strokeWidth=4;shape=mxgraph.flowchart.on-page_reference;plain-blue;gradientColor=none;fillColor=#B5E3Fe;strokeColor=#000000;" parent="1" vertex="1">
<mxGeometry x="322.25" y="196" width="30" height="30" as="geometry" />
</mxCell>
<mxCell id="uWUnNED6HEl2aK5fdaIb-13" value="master" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;overflow=hidden;fontSize=14;fontStyle=1;fontFamily=Courier New;" parent="1" vertex="1">
<mxGeometry x="83" y="190" width="50" height="42" as="geometry" />
</mxCell>
<mxCell id="uWUnNED6HEl2aK5fdaIb-15" value="" style="verticalLabelPosition=bottom;verticalAlign=top;html=1;strokeWidth=4;shape=mxgraph.flowchart.on-page_reference;plain-purple;gradientColor=none;strokeColor=#000000;fillColor=#FF9999;" parent="1" vertex="1">
<mxGeometry x="418.25" y="371" width="30" height="30" as="geometry" />
</mxCell>
<mxCell id="uWUnNED6HEl2aK5fdaIb-20" value="develop/xxxx" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;overflow=hidden;fontSize=14;fontStyle=1;fontFamily=Courier New;" parent="1" vertex="1">
<mxGeometry x="82.25" y="376" width="117.75" height="20" as="geometry" />
</mxCell>
<mxCell id="uWUnNED6HEl2aK5fdaIb-69" value="" style="verticalLabelPosition=bottom;verticalAlign=top;html=1;strokeWidth=4;shape=mxgraph.flowchart.on-page_reference;plain-purple;gradientColor=none;strokeColor=#000000;fillColor=#FF8000;" parent="1" vertex="1">
<mxGeometry x="495.25" y="431" width="30" height="30" as="geometry" />
</mxCell>
<mxCell id="uWUnNED6HEl2aK5fdaIb-70" value="" style="verticalLabelPosition=bottom;verticalAlign=top;html=1;strokeWidth=4;shape=mxgraph.flowchart.on-page_reference;plain-purple;gradientColor=none;strokeColor=#000000;fillColor=#FF8000;" parent="1" vertex="1">
<mxGeometry x="593.25" y="431" width="30" height="30" as="geometry" />
</mxCell>
<mxCell id="uWUnNED6HEl2aK5fdaIb-76" value="feature/xxx" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;overflow=hidden;fontSize=14;fontStyle=1;fontFamily=Courier New;" parent="1" vertex="1">
<mxGeometry x="81.25" y="434" width="102.25" height="20" as="geometry" />
</mxCell>
<mxCell id="uWUnNED6HEl2aK5fdaIb-86" value="release/xxxx" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;overflow=hidden;fontSize=14;fontStyle=1;fontFamily=Courier New;" parent="1" vertex="1">
<mxGeometry x="82" y="322" width="107" height="20" as="geometry" />
</mxCell>
<mxCell id="uWUnNED6HEl2aK5fdaIb-87" value="The development or sprint branch" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;overflow=hidden;fontSize=14;fontStyle=0;fontColor=#009900;" parent="1" vertex="1">
<mxGeometry x="81.25" y="454" width="218.75" height="20" as="geometry" />
</mxCell>
<mxCell id="uWUnNED6HEl2aK5fdaIb-88" value="Your release branch" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;overflow=hidden;fontSize=14;fontStyle=0;fontColor=#009900;" parent="1" vertex="1">
<mxGeometry x="83.25" y="344" width="128.75" height="20" as="geometry" />
</mxCell>
<mxCell id="uWUnNED6HEl2aK5fdaIb-89" value="The develop branch" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;overflow=hidden;fontSize=14;fontStyle=0;fontColor=#009900;" parent="1" vertex="1">
<mxGeometry x="83.25" y="396" width="240" height="20" as="geometry" />
</mxCell>
<mxCell id="uWUnNED6HEl2aK5fdaIb-90" value="The master branch" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;overflow=hidden;fontSize=14;fontStyle=0;fontColor=#009900;" parent="1" vertex="1">
<mxGeometry x="82.25" y="220" width="121.75" height="20" as="geometry" />
</mxCell>
<mxCell id="uWUnNED6HEl2aK5fdaIb-92" value="" style="endArrow=classic;html=1;strokeWidth=1;fontFamily=Courier New;fontColor=#009900;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="220" y="444" as="sourcePoint" />
<mxPoint x="280" y="444" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="uWUnNED6HEl2aK5fdaIb-93" value="" style="endArrow=classic;html=1;strokeWidth=1;fontFamily=Courier New;fontColor=#009900;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="220" y="386" as="sourcePoint" />
<mxPoint x="280" y="386" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="uWUnNED6HEl2aK5fdaIb-104" value="" style="verticalLabelPosition=bottom;verticalAlign=top;html=1;strokeWidth=4;shape=mxgraph.flowchart.on-page_reference;plain-purple;gradientColor=none;strokeColor=#000000;fillColor=#FF9999;" parent="1" vertex="1">
<mxGeometry x="673.25" y="371" width="30" height="30" as="geometry" />
</mxCell>
<UserObject label="Keyfil Git-flow :" link="https://nvie.com/posts/a-successful-git-branching-model/" id="9hBKPDzoitwpIBdzFDQ7-2">
<mxCell style="text;whiteSpace=wrap;html=1;fontStyle=1;fontSize=16;" parent="1" vertex="1">
<mxGeometry x="82.25" y="47" width="427.75" height="20" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="&lt;a href=&quot;https://nvie.com/posts/a-successful-git-branching-model/&quot;&gt;https://nvie.com/posts/a-successful-git-branching-model/&lt;/a&gt;" link="https://nvie.com/posts/a-successful-git-branching-model/" id="9hBKPDzoitwpIBdzFDQ7-3">
<mxCell style="text;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="115" y="72" width="355" height="20" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="see" link="https://nvie.com/posts/a-successful-git-branching-model/" id="9hBKPDzoitwpIBdzFDQ7-7">
<mxCell style="text;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="82.25" y="72" width="32.75" height="20" as="geometry" />
</mxCell>
</UserObject>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-11" value="" style="verticalLabelPosition=bottom;verticalAlign=top;html=1;strokeWidth=4;shape=mxgraph.flowchart.on-page_reference;plain-blue;gradientColor=none;strokeColor=#33001A;fillColor=#99FF99;" parent="1" vertex="1">
<mxGeometry x="901" y="319" width="30" height="30" as="geometry" />
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-13" value="" style="verticalLabelPosition=bottom;verticalAlign=top;html=1;strokeWidth=4;shape=mxgraph.flowchart.on-page_reference;plain-blue;gradientColor=none;strokeColor=#33001A;fillColor=#99FF99;" parent="1" vertex="1">
<mxGeometry x="1001" y="319" width="30" height="30" as="geometry" />
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-16" value="" style="verticalLabelPosition=bottom;verticalAlign=top;html=1;strokeWidth=4;shape=mxgraph.flowchart.on-page_reference;plain-blue;gradientColor=none;strokeColor=#33001A;fillColor=#B5E3FE;" parent="1" vertex="1">
<mxGeometry x="1309" y="196" width="30" height="30" as="geometry" />
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-20" value="" style="endArrow=classic;html=1;rounded=0;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="220" y="334" as="sourcePoint" />
<mxPoint x="280" y="334" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-21" value="" style="endArrow=classic;html=1;rounded=0;shape=flexArrow;fillColor=#CCCCCC;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="81" y="150" as="sourcePoint" />
<mxPoint x="1531" y="150" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-99" value="&lt;b&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;Time&lt;/font&gt;&lt;/b&gt;" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="rNyQgI7Dxj1bwSgN-l9l-21" vertex="1" connectable="0">
<mxGeometry x="-0.2483" relative="1" as="geometry">
<mxPoint x="-527" y="-20" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-22" value="" style="verticalLabelPosition=bottom;verticalAlign=top;html=1;strokeWidth=4;shape=mxgraph.flowchart.on-page_reference;plain-purple;gradientColor=none;strokeColor=#000000;fillColor=#CCCCCC;" parent="1" vertex="1">
<mxGeometry x="782" y="485" width="30" height="30" as="geometry" />
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-23" value="develop" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;overflow=hidden;fontSize=14;fontStyle=1;fontFamily=Courier New;" parent="1" vertex="1">
<mxGeometry x="83.25" y="490" width="102.25" height="20" as="geometry" />
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-24" value="develop server build branch" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;overflow=hidden;fontSize=14;fontStyle=0;fontColor=#009900;" parent="1" vertex="1">
<mxGeometry x="83.25" y="510" width="218.75" height="20" as="geometry" />
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-25" value="" style="endArrow=classic;html=1;strokeWidth=1;fontFamily=Courier New;fontColor=#009900;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="222" y="500" as="sourcePoint" />
<mxPoint x="282" y="500" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-27" value="" style="verticalLabelPosition=bottom;verticalAlign=top;html=1;strokeWidth=4;shape=mxgraph.flowchart.on-page_reference;plain-purple;gradientColor=none;strokeColor=#000000;fillColor=#CC99FF;" parent="1" vertex="1">
<mxGeometry x="904" y="539" width="30" height="30" as="geometry" />
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-28" value="test" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;overflow=hidden;fontSize=14;fontStyle=1;fontFamily=Courier New;" parent="1" vertex="1">
<mxGeometry x="83.25" y="545" width="102.25" height="20" as="geometry" />
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-29" value="develop server build branch" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;overflow=hidden;fontSize=14;fontStyle=0;fontColor=#009900;" parent="1" vertex="1">
<mxGeometry x="83.25" y="565" width="218.75" height="20" as="geometry" />
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-30" value="" style="endArrow=classic;html=1;strokeWidth=1;fontFamily=Courier New;fontColor=#009900;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="222" y="555" as="sourcePoint" />
<mxPoint x="282" y="555" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-31" value="" style="verticalLabelPosition=bottom;verticalAlign=top;html=1;strokeWidth=4;shape=mxgraph.flowchart.on-page_reference;plain-purple;gradientColor=none;strokeColor=#000000;fillColor=#99FFCC;" parent="1" vertex="1">
<mxGeometry x="1253" y="598" width="30" height="30" as="geometry" />
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-32" value="uat" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;overflow=hidden;fontSize=14;fontStyle=1;fontFamily=Courier New;" parent="1" vertex="1">
<mxGeometry x="83.25" y="604" width="102.25" height="20" as="geometry" />
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-33" value="develop server build branch" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;overflow=hidden;fontSize=14;fontStyle=0;fontColor=#009900;" parent="1" vertex="1">
<mxGeometry x="83.25" y="624" width="218.75" height="20" as="geometry" />
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-34" value="" style="endArrow=classic;html=1;strokeWidth=1;fontFamily=Courier New;fontColor=#009900;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="222" y="614" as="sourcePoint" />
<mxPoint x="282" y="614" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-35" value="" style="verticalLabelPosition=bottom;verticalAlign=top;html=1;strokeWidth=4;shape=mxgraph.flowchart.on-page_reference;plain-purple;gradientColor=none;strokeColor=#000000;fillColor=#FF9999;" parent="1" vertex="1">
<mxGeometry x="782" y="371" width="30" height="30" as="geometry" />
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-39" value="" style="verticalLabelPosition=bottom;verticalAlign=top;html=1;strokeWidth=4;shape=mxgraph.flowchart.on-page_reference;plain-purple;gradientColor=none;strokeColor=#000000;fillColor=#FF9999;" parent="1" vertex="1">
<mxGeometry x="902" y="371" width="30" height="30" as="geometry" />
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-45" value="" style="verticalLabelPosition=bottom;verticalAlign=top;html=1;strokeWidth=4;shape=mxgraph.flowchart.on-page_reference;plain-blue;gradientColor=none;strokeColor=#33001A;fillColor=#99FF99;" parent="1" vertex="1">
<mxGeometry x="1211" y="319" width="30" height="30" as="geometry" />
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-10" value="" style="verticalLabelPosition=bottom;verticalAlign=top;html=1;strokeWidth=4;shape=mxgraph.flowchart.on-page_reference;plain-blue;gradientColor=none;strokeColor=#33001A;fillColor=#B5E3FE;" parent="1" vertex="1">
<mxGeometry x="791" y="196" width="30" height="30" as="geometry" />
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-49" value="" style="verticalLabelPosition=bottom;verticalAlign=top;html=1;strokeWidth=4;shape=mxgraph.flowchart.on-page_reference;plain-blue;gradientColor=none;strokeColor=#33001A;fillColor=#99FF99;" parent="1" vertex="1">
<mxGeometry x="1111" y="319" width="30" height="30" as="geometry" />
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-58" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;strokeWidth=3;" parent="1" source="uWUnNED6HEl2aK5fdaIb-10" target="rNyQgI7Dxj1bwSgN-l9l-87" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="840" y="620" as="sourcePoint" />
<mxPoint x="890" y="570" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-59" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;strokeWidth=3;" parent="1" source="rNyQgI7Dxj1bwSgN-l9l-10" target="rNyQgI7Dxj1bwSgN-l9l-16" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="771" y="620" as="sourcePoint" />
<mxPoint x="821" y="570" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-61" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;strokeWidth=3;edgeStyle=orthogonalEdgeStyle;curved=1;" parent="1" source="rNyQgI7Dxj1bwSgN-l9l-10" target="rNyQgI7Dxj1bwSgN-l9l-11" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="821" y="225" as="sourcePoint" />
<mxPoint x="1309" y="225" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-62" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;strokeWidth=3;" parent="1" source="rNyQgI7Dxj1bwSgN-l9l-11" target="rNyQgI7Dxj1bwSgN-l9l-13" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="821" y="290" as="sourcePoint" />
<mxPoint x="1309" y="290" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-65" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;strokeWidth=3;edgeStyle=orthogonalEdgeStyle;curved=1;" parent="1" source="rNyQgI7Dxj1bwSgN-l9l-49" target="rNyQgI7Dxj1bwSgN-l9l-31" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="940" y="140" as="sourcePoint" />
<mxPoint x="1020" y="193" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-66" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;strokeWidth=3;" parent="1" source="rNyQgI7Dxj1bwSgN-l9l-13" target="rNyQgI7Dxj1bwSgN-l9l-49" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="912" y="194.5" as="sourcePoint" />
<mxPoint x="982" y="194.5" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-67" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;strokeWidth=3;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="rNyQgI7Dxj1bwSgN-l9l-49" target="rNyQgI7Dxj1bwSgN-l9l-45" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="844" y="169.5" as="sourcePoint" />
<mxPoint x="1222" y="330" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-69" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;strokeWidth=3;edgeStyle=orthogonalEdgeStyle;curved=1;" parent="1" source="uWUnNED6HEl2aK5fdaIb-10" target="uWUnNED6HEl2aK5fdaIb-15" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="560" y="82" as="sourcePoint" />
<mxPoint x="640" y="135" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-70" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;strokeWidth=3;edgeStyle=orthogonalEdgeStyle;curved=1;" parent="1" source="uWUnNED6HEl2aK5fdaIb-15" target="uWUnNED6HEl2aK5fdaIb-69" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="410" y="319" as="sourcePoint" />
<mxPoint x="490" y="372" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-72" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;strokeWidth=3;" parent="1" source="uWUnNED6HEl2aK5fdaIb-15" target="uWUnNED6HEl2aK5fdaIb-104" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="673.25" y="220" as="sourcePoint" />
<mxPoint x="743.25" y="220" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-73" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;strokeWidth=3;" parent="1" source="uWUnNED6HEl2aK5fdaIb-69" target="uWUnNED6HEl2aK5fdaIb-70" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="580" y="194.5" as="sourcePoint" />
<mxPoint x="650" y="194.5" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-74" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;strokeWidth=3;edgeStyle=orthogonalEdgeStyle;curved=1;" parent="1" source="uWUnNED6HEl2aK5fdaIb-70" target="uWUnNED6HEl2aK5fdaIb-104" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="635" y="453" as="sourcePoint" />
<mxPoint x="703" y="453" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-76" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;strokeWidth=3;edgeStyle=orthogonalEdgeStyle;curved=1;" parent="1" source="rNyQgI7Dxj1bwSgN-l9l-39" target="rNyQgI7Dxj1bwSgN-l9l-13" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="910" y="168.5" as="sourcePoint" />
<mxPoint x="990" y="221.5" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-77" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;strokeWidth=3;" parent="1" source="rNyQgI7Dxj1bwSgN-l9l-35" target="rNyQgI7Dxj1bwSgN-l9l-39" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="782" y="160" as="sourcePoint" />
<mxPoint x="852" y="160" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-78" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;strokeWidth=3;" parent="1" source="uWUnNED6HEl2aK5fdaIb-104" target="rNyQgI7Dxj1bwSgN-l9l-35" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="762" y="180" as="sourcePoint" />
<mxPoint x="832" y="180" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-79" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;strokeWidth=3;edgeStyle=orthogonalEdgeStyle;curved=1;" parent="1" source="rNyQgI7Dxj1bwSgN-l9l-45" target="rNyQgI7Dxj1bwSgN-l9l-16" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="960" y="98.5" as="sourcePoint" />
<mxPoint x="1040" y="151.5" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-80" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;strokeWidth=3;edgeStyle=orthogonalEdgeStyle;curved=1;" parent="1" source="rNyQgI7Dxj1bwSgN-l9l-35" target="rNyQgI7Dxj1bwSgN-l9l-27" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="910" y="160" as="sourcePoint" />
<mxPoint x="990" y="213" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-81" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;strokeWidth=3;edgeStyle=orthogonalEdgeStyle;curved=1;" parent="1" source="uWUnNED6HEl2aK5fdaIb-104" target="rNyQgI7Dxj1bwSgN-l9l-22" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="830" y="168.5" as="sourcePoint" />
<mxPoint x="910" y="221.5" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-82" value="" style="endArrow=none;html=1;rounded=0;strokeWidth=3;strokeColor=#B3B3B3;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="220" y="270" as="sourcePoint" />
<mxPoint x="1500" y="270" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-83" value="hotfix/xxxx" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;overflow=hidden;fontSize=14;fontStyle=1;fontFamily=Courier New;" parent="1" vertex="1">
<mxGeometry x="83" y="260" width="107" height="20" as="geometry" />
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-84" value="Your release branch" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;overflow=hidden;fontSize=14;fontStyle=0;fontColor=#009900;" parent="1" vertex="1">
<mxGeometry x="84.25" y="282" width="128.75" height="20" as="geometry" />
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-87" value="" style="verticalLabelPosition=bottom;verticalAlign=top;html=1;strokeWidth=4;shape=mxgraph.flowchart.on-page_reference;plain-blue;gradientColor=none;fillColor=#B5E3Fe;strokeColor=#000000;" parent="1" vertex="1">
<mxGeometry x="418.25" y="196" width="30" height="30" as="geometry" />
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-88" value="" style="verticalLabelPosition=bottom;verticalAlign=top;html=1;strokeWidth=4;shape=mxgraph.flowchart.on-page_reference;plain-blue;gradientColor=none;fillColor=#FF0000;strokeColor=#000000;" parent="1" vertex="1">
<mxGeometry x="495.25" y="255" width="30" height="30" as="geometry" />
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-89" value="" style="verticalLabelPosition=bottom;verticalAlign=top;html=1;strokeWidth=4;shape=mxgraph.flowchart.on-page_reference;plain-blue;gradientColor=none;fillColor=#FF0000;strokeColor=#000000;" parent="1" vertex="1">
<mxGeometry x="590.25" y="255" width="30" height="30" as="geometry" />
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-90" value="" style="verticalLabelPosition=bottom;verticalAlign=top;html=1;strokeWidth=4;shape=mxgraph.flowchart.on-page_reference;plain-blue;gradientColor=none;fillColor=#B5E3Fe;strokeColor=#000000;" parent="1" vertex="1">
<mxGeometry x="687" y="196" width="30" height="30" as="geometry" />
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-91" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;edgeStyle=orthogonalEdgeStyle;curved=1;strokeWidth=3;" parent="1" source="rNyQgI7Dxj1bwSgN-l9l-87" target="rNyQgI7Dxj1bwSgN-l9l-88" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="840" y="520" as="sourcePoint" />
<mxPoint x="890" y="470" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-92" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;strokeWidth=3;" parent="1" source="rNyQgI7Dxj1bwSgN-l9l-87" target="rNyQgI7Dxj1bwSgN-l9l-90" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="459" y="196" as="sourcePoint" />
<mxPoint x="525" y="196" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-93" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;strokeWidth=3;" parent="1" source="rNyQgI7Dxj1bwSgN-l9l-90" target="rNyQgI7Dxj1bwSgN-l9l-10" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="703" y="180" as="sourcePoint" />
<mxPoint x="769" y="180" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-94" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;strokeWidth=3;" parent="1" source="rNyQgI7Dxj1bwSgN-l9l-88" target="rNyQgI7Dxj1bwSgN-l9l-89" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="708" y="229.5" as="sourcePoint" />
<mxPoint x="782" y="229.5" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-95" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;strokeWidth=3;edgeStyle=orthogonalEdgeStyle;curved=1;" parent="1" source="rNyQgI7Dxj1bwSgN-l9l-89" target="rNyQgI7Dxj1bwSgN-l9l-90" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="635" y="269.5" as="sourcePoint" />
<mxPoint x="703" y="269.5" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-96" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;strokeWidth=3;edgeStyle=orthogonalEdgeStyle;curved=1;" parent="1" source="rNyQgI7Dxj1bwSgN-l9l-89" target="uWUnNED6HEl2aK5fdaIb-104" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="549.75" y="302" as="sourcePoint" />
<mxPoint x="617.75" y="302" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-97" value="" style="endArrow=classic;html=1;rounded=0;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="220" y="269.5" as="sourcePoint" />
<mxPoint x="280" y="269.5" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-98" value="" style="endArrow=classic;html=1;rounded=0;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="220" y="210.5" as="sourcePoint" />
<mxPoint x="280" y="210.5" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-100" value="从主分支开始新的迭代" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;shadow=0;fillColor=#E6E6E6;strokeColor=default;" parent="1" vertex="1">
<mxGeometry x="310" y="404" width="70" height="30" as="geometry" />
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-101" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.145;entryY=0.855;entryDx=0;entryDy=0;entryPerimeter=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;edgeStyle=orthogonalEdgeStyle;curved=1;" parent="1" source="rNyQgI7Dxj1bwSgN-l9l-100" target="uWUnNED6HEl2aK5fdaIb-15" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="840" y="510" as="sourcePoint" />
<mxPoint x="890" y="460" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-102" value="线上问题&lt;div&gt;热修复&lt;/div&gt;" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;shadow=0;fillColor=#E6E6E6;strokeColor=default;" parent="1" vertex="1">
<mxGeometry x="400" y="289" width="70" height="30" as="geometry" />
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-104" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.145;entryY=0.855;entryDx=0;entryDy=0;entryPerimeter=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;edgeStyle=orthogonalEdgeStyle;curved=1;" parent="1" source="rNyQgI7Dxj1bwSgN-l9l-102" target="rNyQgI7Dxj1bwSgN-l9l-88" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="840" y="510" as="sourcePoint" />
<mxPoint x="890" y="460" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-105" value="从迭代分支开启特性分支" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;shadow=0;fillColor=#E6E6E6;strokeColor=default;" parent="1" vertex="1">
<mxGeometry x="390" y="461" width="80" height="30" as="geometry" />
</mxCell>
<mxCell id="rNyQgI7Dxj1bwSgN-l9l-106" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.145;entryY=0.855;entryDx=0;entryDy=0;entryPerimeter=0;edgeStyle=orthogonalEdgeStyle;curved=1;" parent="1" source="rNyQgI7Dxj1bwSgN-l9l-105" target="uWUnNED6HEl2aK5fdaIb-69" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="840" y="510" as="sourcePoint" />
<mxPoint x="890" y="460" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="I48MZaQ_trqXyyd_p-cJ-1" value="合并到开发&lt;div&gt;分支&lt;span style=&quot;background-color: initial;&quot;&gt;自测联调&lt;/span&gt;&lt;/div&gt;" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;shadow=0;fillColor=#E6E6E6;strokeColor=default;" vertex="1" parent="1">
<mxGeometry x="673.25" y="515" width="80" height="30" as="geometry" />
</mxCell>
<mxCell id="I48MZaQ_trqXyyd_p-cJ-2" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.145;entryY=0.855;entryDx=0;entryDy=0;entryPerimeter=0;edgeStyle=orthogonalEdgeStyle;curved=1;" edge="1" parent="1" source="I48MZaQ_trqXyyd_p-cJ-1" target="rNyQgI7Dxj1bwSgN-l9l-22">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1020" y="630" as="sourcePoint" />
<mxPoint x="1070" y="580" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="I48MZaQ_trqXyyd_p-cJ-3" value="合并到&lt;div&gt;测试分支提测&lt;/div&gt;" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;shadow=0;fillColor=#E6E6E6;strokeColor=default;" vertex="1" parent="1">
<mxGeometry x="800" y="574" width="80" height="30" as="geometry" />
</mxCell>
<mxCell id="I48MZaQ_trqXyyd_p-cJ-4" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.145;entryY=0.855;entryDx=0;entryDy=0;entryPerimeter=0;edgeStyle=orthogonalEdgeStyle;curved=1;" edge="1" parent="1" source="I48MZaQ_trqXyyd_p-cJ-3" target="rNyQgI7Dxj1bwSgN-l9l-27">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1020" y="630" as="sourcePoint" />
<mxPoint x="1070" y="580" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="I48MZaQ_trqXyyd_p-cJ-5" value="合并到UAT&lt;div&gt;分支&lt;span style=&quot;background-color: initial;&quot;&gt;验收演示&lt;/span&gt;&lt;/div&gt;" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;shadow=0;fillColor=#E6E6E6;strokeColor=default;" vertex="1" parent="1">
<mxGeometry x="1309" y="568" width="80" height="30" as="geometry" />
</mxCell>
<mxCell id="I48MZaQ_trqXyyd_p-cJ-6" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.855;entryY=0.145;entryDx=0;entryDy=0;entryPerimeter=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;edgeStyle=orthogonalEdgeStyle;curved=1;" edge="1" parent="1" source="I48MZaQ_trqXyyd_p-cJ-5" target="rNyQgI7Dxj1bwSgN-l9l-31">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1020" y="630" as="sourcePoint" />
<mxPoint x="1070" y="580" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="I48MZaQ_trqXyyd_p-cJ-7" value="发布UAT&lt;div&gt;验收演示&lt;/div&gt;" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;shadow=0;fillColor=#E6E6E6;strokeColor=default;" vertex="1" parent="1">
<mxGeometry x="1030" y="280" width="80" height="30" as="geometry" />
</mxCell>
<mxCell id="I48MZaQ_trqXyyd_p-cJ-8" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.855;entryY=0.145;entryDx=0;entryDy=0;entryPerimeter=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;edgeStyle=orthogonalEdgeStyle;curved=1;" edge="1" parent="1" source="I48MZaQ_trqXyyd_p-cJ-7" target="rNyQgI7Dxj1bwSgN-l9l-11">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1020" y="630" as="sourcePoint" />
<mxPoint x="1070" y="580" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="I48MZaQ_trqXyyd_p-cJ-9" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;edgeStyle=orthogonalEdgeStyle;curved=1;" edge="1" parent="1" source="I48MZaQ_trqXyyd_p-cJ-7" target="rNyQgI7Dxj1bwSgN-l9l-13">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1020" y="630" as="sourcePoint" />
<mxPoint x="1070" y="580" as="targetPoint" />
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>