Featured image of post 在 Sourcetree 使用 Git flow

在 Sourcetree 使用 Git flow

来尝试使用 Git flow

上一个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-1click-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分支修改, 修改完成之后, 直接发布, 会自动合并回developmaster分支
    • 模拟发布的时候遇到一个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然后修复提交了,
  • 我们发布版本, 可以看到图片中说明会合并到developmaster分支

建立修复补丁(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)

  • 代码修改提交完之后, 完成修复, 会自动合并到developmaster分支

注意

关联远程仓库

  • 如果有远程仓库, 实际上除了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