上一个Git flow
的流程图
- 初了解看这个流程图会有一些复杂, 我们直接通过
Sourcetree
帮助我们理解这个过程
开始使用(图是Sourcetree
操作,命令是实际执行的)
新建项目log-service
mkdir log-service
cd log-service
git init
初始化项目配置
- 比如确定使用什么框架, 项目说明等等
- 请将以下命令换成你实际要操作的
echo "## log-service" > README.md
git add README.md`
git commit -m "init project"
初始化工作流(git flow init
)
- 图中红色箭头和绿色箭头都可以初始化一个工作流
建立新的功能(git flow feature start show-log
)
- 我们要新建一个功能
show-log
- 这时候是从
develop
上检出分支
提交代码
- 下面的代码我们模拟一些操作
echo "collect show log" > show.log
git add show.log
git commit -m "add: show log
完成功能(git flow feature finish show-log
)
- 操作完成之后,我们的
show-log
分支就被合并到develop
分支,然后同时删除show-log
分支
模拟多人协同开发冲突
- 我们增加一个点击日志, 两个人开发
click-log-1
和click-log-2
git flow feature start click-log-1
git flow feature start click-log-2
git checkout feature/click-log-1
echo "click 1 log" > click.log
git add click.log
git commit -m "add: click log"
git checkout feature/click-log-2
echo " first \n click 2 log" > click.log
git add click.log
git commit -m "add: click log"
- 上面的操作, 都在各自的分支往
click.log
增加了内容, 我们进行完成功能操作 git flow feature finish click-log-1
git flow feature finish click-log-2
- 完成
click-log-1
正常, 但是完成click-log-2
会给我们报代码冲突 - 因为我们的
click-log-2
分支的代码也修改了click.log
文件 - 并且功能完成
click-log-2
之后, 并没有帮我们删除掉这个分支 - 其实是流程中断了,
git flow feature finish
实际上执行的是
git checkout develop
git merge feature/<feature_name>
git branch -d feature/<feature_name>
- 我们按需保留我们需要的代码, 解决好冲突之后提交代码
- 然后再手动删除
click-log-2
分支即可 git branch -d feature/click-log-2
建立发布版本(git flow release start v1.0.0
)
- 这时候是从
develop
上检出分支
- 假如这个时候测试遇到
Bug
, 是可以直接在release
分支修改, 修改完成之后, 直接发布, 会自动合并回develop
和master
分支 - 模拟发布的时候遇到一个
Bug
, 然后处理 echo "release v1.0.0" > release.log
git add release.log
git commit -m "fix: release bug"
- 假如这个时候测试遇到
完成版本发布(git flow release finish v1.0.0
)
- 上面如果测试没有发现
Bug
, 或者发现Bug
然后修复提交了, - 我们发布版本, 可以看到图片中说明会合并到
develop
和master
分支
建立修复补丁(git flow hotfix start click-log
)
- 假如线上的点击日志出了问题, 我们需要紧急修复
- 之前那种
feature
的流程太麻烦, 所以引申出修复补丁, 快速解决的办法 - 这时候是从
master
上检出分支 - 开始模拟修复完操作
echo "fix click log" >> click.log
git add click.log
git commit -m "fix: click log"
完成修复补丁(git flow hotfix finish click-log
)
- 代码修改提交完之后, 完成修复, 会自动合并到
develop
和master
分支
注意
关联远程仓库
- 如果有远程仓库, 实际上除了
start
,finish
还有一个publish
操作 - 实际上
publish
也是几个命令的流程操作,git glow feature publish <feature_name>
- 创建一个名为
feature/<feature_name>
的远程分支。 - 本地分支
track
上述远程分支。 - 如果本地有未
push
代码,则执行push
release publish
略有不同, 可查看https://www.git-tower.com
要不要推送到远程
- 如果这个
feature
需要多人一同开发, 则需要推送 - 如果你一个人完成, 不需要推送
合并问题
多人协作的时候,应由仓库(项目)管理员来创建master分支并在本地初始化好GitFlow后一并将master和develop分支推送到远程仓库(master分支默认有写保护,只有创建者才能写入推送,其他协作者只能pull拉取)。其他协作者将项目克隆下来,同样要记得初始化GitFlow,注意配置要保持一致。其他协作者在本地完成feature开发,然后推送到develop分支,由项目管理员来负责发布release分支和发布新版本
参考
Gitflow 使用最强指北
git flow工作流及sourcetree实现
https://www.git-tower.com