shipengfei

Update git_flow.md

1 -## GIT FLOW规范 1 +## GIT FLOW规范
2 2
3 -Git Flow是构建在Git之上的一个组织软件开发活动的模型,是在Git之上构建的一项软件开发最佳实践。Git Flow是一套使用Git进行源代码管理时的一套行为规范和简化部分Git操作的工具。 3 +Git Flow是构建在Git之上的一个组织软件开发活动的模型,是在Git之上构建的一项软件开发最佳实践。Git Flow是一套使用Git进行源代码管理时的一套行为规范和简化部分Git操作的工具。
4 4
5 * [A successful Git branching model](http://nvie.com/posts/a-successful-git-branching-model/) 5 * [A successful Git branching model](http://nvie.com/posts/a-successful-git-branching-model/)
6 -* [基于git的源代码管理模型](http://www.ituring.com.cn/article/56870) 6 +* [基于git的源代码管理模型](http://www.ituring.com.cn/article/56870)
7 7
8 -### 1. GIT FLOW 规范 8 +### 1. GIT FLOW 规范
9 9
10 -项目永远存在两个分支 10 +项目永远存在两个分支
11 11
12 -* 主分支master 12 +* 主分支master
13 -* 开发分支 develop(dev) 13 +* 开发分支 develop(dev)
14 14
15 -对于master分支,任何时候这个分支拿到的,都是稳定发布版。 15 +对于master分支,任何时候这个分支拿到的,都是稳定发布版。
16 16
17 -而develop分支,存放的是最新的开发版。 17 +而develop分支,存放的是最新的开发版。
18 18
19 -其中,项目中存在四种短期分支 19 +其中,项目中存在四种短期分支
20 20
21 -* 功能分支 (feature branch) 21 +* 功能分支 (feature branch)
22 -* 补丁分支(hotfix branch) 22 +* 补丁分支(hotfix branch)
23 -* 测试bug分支(bug branch) 23 +* 测试bug分支(bug branch)
24 -* 预发分支(release branch) 24 +* 预发分支(release branch)
25 25
26 -一旦开发完成,以上分支会被合并到develop/master,然后删除 26 +一旦开发完成,以上分支会被合并到develop/master,然后删除
27 27
28 28
29 29
30 -对于版本发布的项目,每有一个稳定的版本,都要从master上打出一个版本,版本号按产品进行定义。 30 +对于版本发布的项目,每有一个稳定的版本,都要从master上打出一个版本,版本号按产品进行定义。
31 31
32 -在master分支上,在新的功能增加前,只有hotfix,才允许将代码合并到这个分支,合并后,要更新小版本号。 32 +在master分支上,在新的功能增加前,只有hotfix,才允许将代码合并到这个分支,合并后,要更新小版本号。
33 33
34 34
35 35
36 -**规则定义**: 36 +**规则定义**:
37 37
38 -* 任何向master进行提交,都需要打tag. tag的内容为当前版本号,当由release向master进行合并,在主版本和次版本中进行变化。由hotfix分支向master进行合并,在最小版本中进行变化。 38 +* 任何向master进行提交,都需要打tag. tag的内容为当前版本号,当由release向master进行合并,在主版本和次版本中进行变化。由hotfix分支向master进行合并,在最小版本中进行变化。
39 -* master分支合并,必须经过PM同意后才能合并。可通过git的merge request权限定义进行操作。 39 +* master分支合并,必须经过PM同意后才能合并。可通过git的merge request权限定义进行操作。
40 -* 所有的feature功能,都需要存在分支,分支可以不提交到远程库。 feature分支从当前的develop/dev分支进行派生。feature开发结束后,向develop进行rebase操作。向develop分支合并后,feature分支即可删除。 40 +* 所有的feature功能,都需要存在分支,分支可以不提交到远程库。 feature分支从当前的develop/dev分支进行派生。feature开发结束后,向develop进行rebase操作。向develop分支合并后,feature分支即可删除。
41 -* 所有的bugfix/hotfix功能,也都需要存在分支,分支可以不提交到远程库(只要验证确认即可)。 但是如果提交后,测试人员验证后,bugfix/hotfix即可删除。 41 +* 所有的bugfix/hotfix功能,也都需要存在分支,分支可以不提交到远程库(只要验证确认即可)。 但是如果提交后,测试人员验证后,bugfix/hotfix即可删除。
42 -* master分支不允许修改和提交,只允许PM进行Merge/Rebase操作。除非特殊情况下(比如,修改代码量非常小),由PM允许后,才能够在dev上直接修改并提交。 42 +* master分支不允许修改和提交,只允许PM进行Merge/Rebase操作。除非特殊情况下(比如,修改代码量非常小),由PM允许后,才能够在dev上直接修改并提交。
43 -* 当期功能完成后(可能存在多个feature, 多个bug分支),所有过程中产生的feature/bug分支都合并到了dev分支上。那么就由PM进行打版,版本统一向release###分支发布,release发布后,相应的本期开发的feat分支和bug分支删除。经过系统测试并产品验收后,由PM将release分支的内容合并到master上,并将release分支删除。 43 +* 当期功能完成后(可能存在多个feature, 多个bug分支),所有过程中产生的feature/bug分支都合并到了dev分支上。那么就由PM进行打版,版本统一向release###分支发布,release发布后,相应的本期开发的feat分支和bug分支删除。经过系统测试并产品验收后,由PM将release分支的内容合并到master上,并将release分支删除。
44 -* 当一个bug产生后,由测试人员/开发人员登录BUG(注意,必须登录到禅道),开发人员确认此BUG是否影响到mastery主分支,如果影响,则必须从master分支签出一个hotfix分支进行修改,如果不影响,则从关联的dev/release中签出相应的bugfix分支进行修改。 修改完成后,hotfix分支需要merge到master/dev/release分支,bugfix分支需要merge到dev/release分支。bugfix/hotfix分支的名称必须包含禅道中的BUG号。 44 +* 当一个bug产生后,由测试人员/开发人员登录BUG(注意,必须登录到禅道),开发人员确认此BUG是否影响到mastery主分支,如果影响,则必须从master分支签出一个hotfix分支进行修改,如果不影响,则从关联的dev/release中签出相应的bugfix分支进行修改。 修改完成后,hotfix分支需要merge到master/dev/release分支,bugfix分支需要merge到dev/release分支。bugfix/hotfix分支的名称必须包含禅道中的BUG号。
45 -* 在一个时间,feature分支可以存在多个,bugfix/hotfix分支可以存在多个,但release分支不会有多个,只会存在一个,这一个就是从dev签出,且即将要发布到master的那个版本。当release发布到master后,PM需要将release分支删除。 45 +* 在一个时间,feature分支可以存在多个,bugfix/hotfix分支可以存在多个,但release分支不会有多个,只会存在一个,这一个就是从dev签出,且即将要发布到master的那个版本。当release发布到master后,PM需要将release分支删除。
46 -* 所有前端项目/API项目都遵守此规则。 46 +* 所有前端项目/API项目都遵守此规则。
47 47
48 48
49 49
50 -![](http://www.ituring.com.cn/download/01YiLAQQnlPV) 50 +![](http://resource.qingger.com/QQ%E5%9B%BE%E7%89%8720170711130718.png)
51 51
52 -### 2. 提交Commit规范 52 +### 2. 提交Commit规范
53 53
54 -提交commit,一定要给出完整扼要的提交信息。项目经理需要检查提交的信息是否足够。每个成员也需要确保自己的提交信息完整。提交信息如下所示: 54 +提交commit,一定要给出完整扼要的提交信息。项目经理需要检查提交的信息是否足够。每个成员也需要确保自己的提交信息完整。提交信息如下所示:
55 55
56 ``` 56 ```
57 Present-tense summary under 50 characters 57 Present-tense summary under 50 characters
...@@ -62,107 +62,107 @@ Present-tense summary under 50 characters ...@@ -62,107 +62,107 @@ Present-tense summary under 50 characters
62 http://project.management-system.com/ticket/123 62 http://project.management-system.com/ticket/123
63 ``` 63 ```
64 64
65 -一个正式的提交功能的注释: 65 +一个正式的提交功能的注释:
66 66
67 ``` 67 ```
68 -HOTFIX3001(UserController|CacheListener) : 解决了头部Cache没有引入的问题 68 +HOTFIX3001(UserController|CacheListener) : 解决了头部Cache没有引入的问题
69 69
70 -1. UserController头部没有引入Cache包导致异常 70 +1. UserController头部没有引入Cache包导致异常
71 -2. CacheListener Log去除 71 +2. CacheListener Log去除
72 72
73 http://chandao.runsa.cn:8604/pro/bug-view-3001.html 73 http://chandao.runsa.cn:8604/pro/bug-view-3001.html
74 ``` 74 ```
75 75
76 -不建议通过git commit命令提交,而是建议通过SourceTree或者git cz命令进行提交。 76 +不建议通过git commit命令提交,而是建议通过SourceTree或者git cz命令进行提交。
77 77
78 -关于git cz命令,查看: [Git Commit](https://mp.weixin.qq.com/s?__biz=MzAwNDYwNzU2MQ==&mid=401622986&idx=1&sn=470717939914b956ac372667ed23863c&scene=2&srcid=0114ZcTNyAMH8CLwTKlj6CTN&from=timeline&isappinstalled=0#wechat_redirect) 78 +关于git cz命令,查看: [Git Commit](https://mp.weixin.qq.com/s?__biz=MzAwNDYwNzU2MQ==&mid=401622986&idx=1&sn=470717939914b956ac372667ed23863c&scene=2&srcid=0114ZcTNyAMH8CLwTKlj6CTN&from=timeline&isappinstalled=0#wechat_redirect)
79 79
80 80
81 81
82 -#### 2.1 提交Commit内容定义 82 +#### 2.1 提交Commit内容定义
83 83
84 -[教你如何在Commit时有话可说](http://mp.weixin.qq.com/s?__biz=MzAwNDYwNzU2MQ==&mid=401622986&idx=1&sn=470717939914b956ac372667ed23863c&scene=2&srcid=0114ZcTNyAMH8CLwTKlj6CTN&from=timeline&isappinstalled=0#wechat_redirect) 84 +[教你如何在Commit时有话可说](http://mp.weixin.qq.com/s?__biz=MzAwNDYwNzU2MQ==&mid=401622986&idx=1&sn=470717939914b956ac372667ed23863c&scene=2&srcid=0114ZcTNyAMH8CLwTKlj6CTN&from=timeline&isappinstalled=0#wechat_redirect)
85 85
86 -##### 2.1.1 Commit具体格式 86 +##### 2.1.1 Commit具体格式
87 87
88 ``` 88 ```
89 Type(Scope) : Subject 89 Type(Scope) : Subject
90 -<空行> 90 +<空行>
91 <body> 91 <body>
92 -<空行> 92 +<空行>
93 <footer> 93 <footer>
94 ``` 94 ```
95 95
96 -Type表示提交所属类型,定义如下: 96 +Type表示提交所属类型,定义如下:
97 97
98 -* feat#### : 表示新增加的功能,####表示功能编号,功能编号取自于禅道中登录的功能列表ID 98 +* feat#### : 表示新增加的功能,####表示功能编号,功能编号取自于禅道中登录的功能列表ID
99 -* hotfix#### : 表示热补丁提交,一般产生这个提交是为当前线上环境错误进行了修正,来自的分支也是从master中分离出来的。####表示的是 99 +* hotfix#### : 表示热补丁提交,一般产生这个提交是为当前线上环境错误进行了修正,来自的分支也是从master中分离出来的。####表示的是
100 -* bugfix#### : 在功能性测试阶段,在测试过程中发现的BUG修复提交。这个提交只会出现在develop和release分支中。 100 +* bugfix#### : 在功能性测试阶段,在测试过程中发现的BUG修复提交。这个提交只会出现在develop和release分支中。
101 -* doc : 表示文档性提交,提交此代码不会影响任何运行逻辑。 101 +* doc : 表示文档性提交,提交此代码不会影响任何运行逻辑。
102 -* style : 代码格式变动,比如对代码进行格式化缩进整理,显示变动等。 102 +* style : 代码格式变动,比如对代码进行格式化缩进整理,显示变动等。
103 -* refactor : 重构,不是新增功能,也不是修改bug的代码变动,比如优化了函数内部的实现逻辑,重命名了函数,将类的功能进行重构等。 103 +* refactor : 重构,不是新增功能,也不是修改bug的代码变动,比如优化了函数内部的实现逻辑,重命名了函数,将类的功能进行重构等。
104 -* test : 测试所使用,提交的代码为单元测试或者为某一功能测试用。 104 +* test : 测试所使用,提交的代码为单元测试或者为某一功能测试用。
105 -* chore : 构建过程或者辅助工具依赖的变动。比如,composer,npm变更,构建代码的变更等。 105 +* chore : 构建过程或者辅助工具依赖的变动。比如,composer,npm变更,构建代码的变更等。
106 106
107 - 对于新的功能, 107 + 对于新的功能,
108 108
109 109
110 110
111 -**Scope**表示本次Commit影响范围,简要说明修改会涉及的部分,使用英文或中文。 111 +**Scope**表示本次Commit影响范围,简要说明修改会涉及的部分,使用英文或中文。
112 112
113 -如果只修改了一个文件,即写文件的名称,但不要写后缀名,如SiteProductController。 113 +如果只修改了一个文件,即写文件的名称,但不要写后缀名,如SiteProductController。
114 114
115 -如果修改了多个文件,则写本次修改的大概影响范围,如修改了买家的积分获取方式,影响到了积分获取,积分显示,积分兑换等 ,则可以使用 : 买家积分模块 或者 BuyerPointsMode 都是可以的。 115 +如果修改了多个文件,则写本次修改的大概影响范围,如修改了买家的积分获取方式,影响到了积分获取,积分显示,积分兑换等 ,则可以使用 : 买家积分模块 或者 BuyerPointsMode 都是可以的。
116 116
117 117
118 118
119 -**Subject** 则简要描述本次改动,有效示例: 119 +**Subject** 则简要描述本次改动,有效示例:
120 120
121 ``` 121 ```
122 -对于买家积分显示、获得的程序变更 122 +对于买家积分显示、获得的程序变更
123 -个人中心页面布局变化 123 +个人中心页面布局变化
124 ``` 124 ```
125 125
126 126
127 127
128 -**Body** : 内容是对上面subject里内容的展开,在此做更加详尽的描述,如果subject能够讲清楚此次变更的动机,则body可以不填,如果描述不清楚(尤其对于feature的提交),则必须在body中写出此次修改的动机及详细描述。有效示例: 128 +**Body** : 内容是对上面subject里内容的展开,在此做更加详尽的描述,如果subject能够讲清楚此次变更的动机,则body可以不填,如果描述不清楚(尤其对于feature的提交),则必须在body中写出此次修改的动机及详细描述。有效示例:
129 129
130 ``` 130 ```
131 -因为新增了积分变化的功能,所以对于以下接口需要考虑到积分是否有效及有效期的判断: 131 +因为新增了积分变化的功能,所以对于以下接口需要考虑到积分是否有效及有效期的判断:
132 - - 个人积分显示接口(/buyer/point/) 132 + - 个人积分显示接口(/buyer/point/)
133 - - 积分锁定接口(/buyer/point/lock) 133 + - 积分锁定接口(/buyer/point/lock)
134 - - 积分解锁接口(/buyer/point/unlock) 134 + - 积分解锁接口(/buyer/point/unlock)
135 ``` 135 ```
136 136
137 ``` 137 ```
138 -个人中心页面布局按照功能点#3333,需要作出如下变更,具体变更点和UI参考: 138 +个人中心页面布局按照功能点#3333,需要作出如下变更,具体变更点和UI参考:
139 - UI : http://xxxx.com/ 139 - UI : http://xxxx.com/
140 - Feature : http://xxx.com 140 - Feature : http://xxx.com
141 ``` 141 ```
142 142
143 143
144 144
145 -**footer**里的主要放置**不兼容变更****Issue关闭**的信息,一般不用填写。 145 +**footer**里的主要放置**不兼容变更****Issue关闭**的信息,一般不用填写。
146 146
147 147
148 148
149 -### 3. 使用git rebase代替git merge (尤其是针对develop派生出来的feature进行合并时) 149 +### 3. 使用git rebase代替git merge (尤其是针对develop派生出来的feature进行合并时)
150 150
151 -当多个分支并行发展,需要合并时,使用rebase功能进行合并,这样在SourceTree跟踪代码变更时,会更清晰易懂。 151 +当多个分支并行发展,需要合并时,使用rebase功能进行合并,这样在SourceTree跟踪代码变更时,会更清晰易懂。
152 152
153 -使用rebase经常会用在多个feature分支,或者多个bug分支并行开发,最后再将多个分支合并时候所做的操作。 153 +使用rebase经常会用在多个feature分支,或者多个bug分支并行开发,最后再将多个分支合并时候所做的操作。
154 154
155 -[参考:git rebase简介(基本篇)](http://blog.csdn.net/hudashi/article/details/7664631) 155 +[参考:git rebase简介(基本篇)](http://blog.csdn.net/hudashi/article/details/7664631)
156 156
157 157
158 158
159 159
160 160
161 -### 4. 其它 161 +### 4. 其它
162 162
163 -git分支管理流程可以查看: 163 +git分支管理流程可以查看:
164 164
165 -[Git flow 開發流程](https://ihower.tw/blog/archives/5140) 165 +[Git flow 開發流程](https://ihower.tw/blog/archives/5140)
166 166
167 -[GIT分支管理策略](http://www.ruanyifeng.com/blog/2012/07/git.html) 167 +[GIT分支管理策略](http://www.ruanyifeng.com/blog/2012/07/git.html)
168 168
......