GitFlow总结

集中式工作流

集中式工作流所有开发功能都在一个分支上进行。

弊端:feature代码缺乏隔离,每个人开发的功能混合在一起,互相牵制。

功能分支工作流

功能分支工作流以集中式工作流为基础,不同的是为各个新功能分配一个专门的分支来开发。

弊端: 分支爆炸,难以管理,没人知道每个分支的状态。

GitFlow

为不同的分支分配一个很明确的角色,并定义分支之间如何和什么时候进行交互。多个功能同时开发,在release时可以选择型交付已经开发好的功能。

采用了功能分支的工作方式,同时又避免了大量分支难以管理的问题。

开发过程中开发功能相互不影响,功能没开发完也不会影响版本发布。大一些的需求可以在feature上开发,可以跨几个版本发布,比如一个大需求要开发3个月,不会导致主干必须等3个月,可以提前投入开发,开发完了就合并到dev即可。

弊端:增加了管理成本,学习成本非常高,十分容易出错。

GitFlow总结

GitFlow将分支分为五个角色:

  • master : 记录所有Tag。
  • develop :主分支,包含所有提交。
  • feature :功能分支开发。
  • release :为发版本做准备。
  • hotfix :紧急修复上线产品的bug。

分支详解

master分支

master分支上存放的应该是随时可供在生产环境中部署的代码。 当开发产生了一份新的可供部署的代码时,master分支上的代码会被更新。同时,每一次更新,添加对应的版本号标签(TAG)。

注意:永远不要在 master 分支上直接开发和提交代码,以确保 master 上的代码一直可用 。

develop分支

用作平时开发的主分支,并一直存在,永远是功能最新最全的分支。 feature,release分支都是基于develop分支建立的。feature,release,hotfix分支最终都要合并到该分支,保证该分支拥有最全的代码。

注意:需要为分支建立Daily Build。

feature分支

用于开发新功能。基于develop分支建立。如果该分支需要多人协作,那么需要将该分支push到远程,否则保留在本地即可。功能开发完成之后要合并到develop,并且将该分支进行删除,防止分支爆炸。

release分支

用于发布准备的专门分支。当开发进行到一定程度,不再进行新功能开发,要发版本的时候建立该分支并且指定版本号。该分支将用来测试以及改bug。 release 分支上的代码要合并到master 分支和 develop 分支。合并到master分支要打tag。

注意:需要为这个分支单独建立Jekins Build。但是该分支也不是永久存在的,开发完成就要将其删掉。

hotfix分支

用于修复线上代码的bug。基于master 分支建立,完成之后打上 tag 合并到 master 和develop 分支。

注意:需要为这个分支单独建立Jekins Build。但是该分支也不是永久存在的,开发完成就要将其删掉。

注意事项:

  • 所有feature分支基于develop 分支建立。
  • 所有hotfix 分支基于 master 建立。
  • 所有在 master 上的提交都必要要有 tag,方便回滚。
  • hotfix分支和release分支必须合并到master和develop两个分支上面。
  • master和develp属于主要分支,永远保留。
  • hotfix,release,feature属于辅助分支,临时存在,使用完则在本地以及远程进行删除。
  • 在master上面打tag,一定要push到远程。
  • merge代码之后,一定要记得push到远程。

Git 基本命令操作GitFlow

所有的操作总结起来就是建立分支,合并分支,删除分支,打tag。

a. 创建develop分支

git branch develop

git push -u origin develop

b. 创建feature分支

git checkout -b feature_TP develop # 基于develop分支创建feature_TP分支。

git push -u origin feature_TP # 如果需要多人协作,需要将其push到远程。

c. 完成feature分支

git checkout develop

git pull origin develop

git merge --no-ff feature_TP # 将feature分支合并到develop,--no-ff参数可以保留分支信息。

git push origin develop

git branch -d feature_TP # 删除本地feature分支。

git push origin --delete feature_TP #删除远程feature分支。

d. 创建relase分支

git checkout -b release-0.1.0 develop # 基于develop建立release分支并切换到该分支。

e. 完成release分支

# 1. 将release分支合并到master,并将master代码push到远程。

git checkout master

git merge --no-ff release-0.1.0

git push

# 2. 将release分支合并到develop,并将develop代码push到远程。

git checkout develop

git merge --no-ff release-0.1.0

git push

# 3. 在本地和远程删除该release分支。

git branch -d release-0.1.0

git push origin --delete release-0.1.0

# 4. 在master上面打tag,并push到远程。

git tag -a v0.1.0 master

git push --tags

f. 创建hotfix分支

git checkout -b hotfix-0.1.1 master # 基于master建立hotfix分支。

g. 完成hotfix分支

操作同release分支。

# 1. 将hotfix分支合并到master,并将master代码push到远程。

git checkout master

git merge --no-ff hotfix-0.1.1

git push

# 2. 将hotfix分支合并到develop,并将develop代码push到远程。

git checkout develop

git merge --no-ff hotfix-0.1.1

git push

# 3. 在本地和远程删除该hotfix分支。

git branch -d hotfix-0.1.1

git push origin --delete hotfix-0.1.1

# 4. 在hotfix上面打tag,并push到远程。

git tag -a v0.1.1 master

git push --tags

GitFlow命令

git flow命令将上述的操作进行封装,便于使用。

GitFlow总结

1. 初始化git flow

git flow init

2.开发一个feature的步骤

a. 开始一个新feature

基于develop建立一个feature_TP分支。

git flow feature start feature_TP

b. 将feature分支push到远程

只是一个push分支的操作。

git flow feature publish feature_TP

c. 更新feature分支代码

只是一个pull分支的操作。

git flow feature pull origin feature_TP

d. 完成该feature

将feature分支merge到develop,并且删掉该分支。

git flow feature finish feature_TP

e. push develop分支上的代码

git checkout develop

git push origin develop

3.创建一个release的步骤

a. 开始一个release

基于develop建立一个release分支。

git flow release start v1.0

b. 将release分支push到远程

只是一个push分支的操作。

git flow release publish v1.0

c. 更新release分支代码

只是一个pull分支的操作。

git flow release pull origin v1.0

d. 完成该release

将release分支分别merge到develop和master分支,并且删掉该分支。使用该分支的名称打上了tag。

git flow release finish v1.0

e. push develop 和 master 分支上的代码

git checkout develop

git push origin develop

git checkout master

git push origin master

f. push tags

将tag push到远程

git push --tags

4.创建一个hotfix的步骤

a. 开始一个hotfix

基于master建立一个hotfix分支。

git flow hotfix start v1.1

b. 将hotfix分支push到远程

只是一个push分支的操作。

git flow hotfix publish v1.1

c. 更新hotfix分支代码

只是一个pull分支的操作。

git flow hotfix pull origin v1.1

d. 完成该hotfix

将hotfix分支分别merge到develop和master分支,并且删掉该分支。使用该分支的名称打上了tag。

git flow hotfix finish v1.1

e. push develop 和 master 分支上的代码

git checkout develop

git push origin develop

git checkout master

git push origin master

f. push tags

将tag push到远程

git push --tags


分享到:


相關文章: