yeskery

Git 在团队中的最佳实践-如何正确使用 Git Flow

我们已经从 SVN 切换到 Git 很多年了,现在几乎所有的项目都在使用 Github 管理, 本篇文章讲一下为什么使用 Git, 以及如何在团队中正确使用。

Git 的优点

Git 的优点很多,但是这里只列出我认为非常突出的几点。

  1. 由于是分布式,所有本地库包含了远程库的所有内容。
  2. 优秀的分支模型,打分支以及合并分支,机器方便。
  3. 快速,在这个时间就是金钱的时代,Git 由于代码都在本地,打分支和合并分支机器快速,使用个SVN的能深刻体会到这种优势。

感兴趣的,可以去看一下 Git 本身的设计,内在的架构体现了很多的优势,不愧是出资天才程序员 Linus (Linux 之父) 之手。

版本管理的挑战

虽然有这么优秀的版本管理工具,但是我们面对版本管理的时候,依然有非常大得挑战,我们都知道大家工作在同一个仓库上,那么彼此的代码协作必然带来很多问题和挑战,如下:

  1. 如何开始一个 Feature 的开发,而不影响别的 Feature?
  2. 由于很容易创建新分支,分支多了如何管理,时间久了,如何知道每个分支是干什么的?
  3. 哪些分支已经合并回了主干?
  4. 如何进行 Release 的管理?开始一个 Release 的时候如何冻结 Feature, 如何在 Prepare Release 的时候,开发人员可以继续开发新的功能?
  5. 线上代码出Bug了,如何快速修复?而且修复的代码要包含到开发人员的分支以及下一个 Release?

大部分开发人员现在使用 Git 就只是用三个甚至两个分支,一个是 Master, 一个是 Develop, 还有一个是基于 Develop 打得各种分支。这个在小项目规模的时候还勉强可以支撑,因为很多人做项目就只有一个 Release, 但是人员一多,而且项目周期一长就会出现各种问题。

Git Flow

就像代码需要代码规范一样,代码管理同样需要一个清晰的流程和规范

Vincent Driessen 同学为了解决这个问题提出了 A Successful Git Branching Model

下面是Git Flow的流程图

o_git-flow-nvie

上面的图你理解不了? 没关系,这不是你的错,我觉得这张图本身有点问题,这张图应该左转 90 度,大家应该就很用以理解了。

Git Flow 常用的分支

  • Production 分支
    也就是我们经常使用的 Master 分支,这个分支最近发布到生产环境的代码,最近发布的 Release, 这个分支只能从其他分支合并,不能在这个分支直接修改。

  • Develop 分支
    这个分支是我们是我们的主开发分支,包含所有要发布到下一个 Release 的代码,这个主要合并与其他分支,比如 Feature 分支。

  • Feature 分支
    这个分支主要是用来开发一个新的功能,一旦开发完成,我们合并回 Develop 分支进入下一个 Release。

  • Release 分支
    当你需要一个发布一个新 Release 的时候,我们基于Develop分支创建一个 Release 分支,完成 Release 后,我们合并到 Master 和 Develop 分支。

  • Hotfix 分支
    当我们在 Production 发现新的 Bug 时候,我们需要创建一个 Hotfix, 完成 Hotfix 后,我们合并回 Master 和 Develop 分支,所以 Hotfix 的改动会进入下一个 Release。

Git Flow如何工作

初始分支

所有在 Master 分支上的 Commit 应该 Tag

o_git-workflow-release-cycle-1historical

Feature 分支

分支名 feature/*

Feature 分支做完后,必须合并回 Develop 分支, 合并完分支后一般会删点这个 Feature 分支,但是我们也可以保留。

o_git-workflow-release-cycle-2feature

Release 分支

分支名 release/*

Release 分支基于 Develop 分支创建,打完 Release 分之后,我们可以在这个 Release 分支上测试,修改 Bug 等。同时,其它开发人员可以基于开发新的 Feature (记住:一旦打了 Release 分支之后不要从 Develop 分支上合并新的改动到 Release 分支)

发布 Release 分支时,合并 Release 到 Master 和 Develop, 同时在 Master 分支上打个 Tag 记住 Release 版本号,然后可以删除 Release 分支了。

o_git-workflow-release-cycle-3release

维护分支 Hotfix

分支名 hotfix/*

hotfix 分支基于 Master 分支创建,开发完后需要合并回 Master 和 Develop 分支,同时在 Master 上打一个 tag。

o_git-workflow-release-cycle-4maintenance

Git Flow代码示例

  • 创建 Develop 分支
  1. git branch develop
  2. git push -u origin develop
  • 开始新 Feature 开发
  1. git checkout -b some-feature develop
  2. # Optionally, push branch to origin:
  3. git push -u origin some-feature
  4. # 做一些改动
  5. git status
  6. git add some-file
  7. git commit
  • 完成 Feature
  1. git pull origin develop
  2. git checkout develop
  3. git merge --no-ff some-feature
  4. git push origin develop
  5. git branch -d some-feature
  6. # If you pushed branch to origin:
  7. git push origin --delete some-feature
  • 开始 Relase
  1. git checkout -b release-0.1.0 develop
  2. # Optional: Bump version number, commit
  3. # Prepare release, commit
  • 完成 Release
  1. git checkout master
  2. git merge --no-ff release-0.1.0
  3. git push
  4. git checkout develop
  5. git merge --no-ff release-0.1.0
  6. git push
  7. git branch -d release-0.1.0
  8. # If you pushed branch to origin:
  9. git push origin --delete release-0.1.0
  10. git tag -a v0.1.0 master
  11. git push --tags
  • 开始 Hotfix
  1. git checkout -b hotfix-0.1.1 master
  • 完成 Hotfix
  1. git checkout master
  2. git merge --no-ff hotfix-0.1.1
  3. git push
  4. git checkout develop
  5. git merge --no-ff hotfix-0.1.1
  6. git push
  7. git branch -d hotfix-0.1.1
  8. git tag -a v0.1.1 master
  9. git push --tags

Git flow 工具

实际上,当你理解了上面的流程后,你完全不用使用工具,但是实际上我们大部分人很多命令就是记不住呀,流程就是记不住呀,肿么办呢?

总有聪明的人创造好的工具给大家用, 那就是 Git flow script.

安装

  • OS X:brew install git-flow

  • Linux:apt-get install git-flow

  • Windows:wget -q -O - --no-check-certificate https://github.com/nvie/gitflow/raw/develop/contrib/gitflow-installer.sh | bash

使用

  • 初始化: git flow init

  • 开始新 Feature: git flow feature start MYFEATURE

  • Publish 一个 Feature(也就是 push 到远程): git flow feature publish MYFEATURE

  • 获取 Publish 的 Feature: git flow feature pull origin MYFEATURE

  • 完成一个 Feature: git flow feature finish MYFEATURE

  • 开始一个 Release: git flow release start RELEASE [BASE]

  • Publish 一个 Release: git flow release publish RELEASE

  • 发布 Release: git flow release finish RELEASE
    别忘了 git push --tags

  • 开始一个 Hotfix: git flow hotfix start VERSION [BASENAME]

  • 发布一个 Hotfix: git flow hotfix finish VERSION

o_git-flow-commands

Git Flow GUI

上面讲了这么多,我知道还有人记不住,那么又有人做出了 GUI 工具,你只需要点击下一步就行,工具帮你干这些事!!!

SourceTree

当你用 Git-flow 初始化后,基本上你只需要点击 git flow 菜单选择 start feature, release 或者 hotfix, 做完后再次选择 git flow 菜单,点击 Done Action. 我勒个去,我实在想不到还有比这更简单的了。

目前 SourceTree 支持 Mac, Windows, Linux.

这么好的工具请问多少钱呢? 免费!!!!

o_source-tree-git-flow-init

o_sourcetree-hero-mac-log

Git flow for visual studio

GitFlow for Visual Studio

o_gf_init-vs

o_gf_features

o_gf_finishfeature

本文转载自:https://www.cnblogs.com/wish123/p/9785101.html

评论

发表评论 点击刷新验证码

提示

该功能暂未开放