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