今天Bear實驗室的主題不是要介紹程式,而是來好好介紹一下有關管理進度開發的工具! 
那今天實驗室的主題是.....Git Flow!!!!  
使用 git 的開發者都知道 git 有 branch 這個功能,但要如何運用在開發流程呢?
(以下內容將以Source Tree講解,不知道Source Tree是什麼的請點此連結)
  

什麼是 git flow?

有關Git flow呢,現在網路上有人整理出了一套模型流程:A successful Git branching model 
附上簡體翻譯版:一个成功的Git分支模型

 
一個Git flow,其中的內容大致可以區分如下:

主要分支
* master:釋出的版本,只從 release 與 hotfix merge  回來,不直接在上面 commit 變更。
* develop:開發中的版本,預設在這 branch 上,開發修改功能都從這分支出去。

支援性分支
* feature branches:從 develop 分支出來,當功能開發修改完成後 merge 回 develop
* release branches:從 develop 分支出來,是準備釋出的版本,只修改版本號與 bug,完成後 merge 回 develop 與 master,並在 master 標上版本號的 tag
* hotfix branches:從 master 分支出來,主要是處理已釋出版本需要立即修改的錯誤,完成後 merge 回 develop 與 master,並在 master 標上版本號的 tag

在本篇教學中,採用 SourceTree 這套 git gui 工具,因為它有整合了git flow的功能,很方便。
如果你超愛指令,但又不想打太多,你可以參考Git-flow 使用笔记安裝git-flow工具操作。

本篇教學範例將以圖說的方式,列出以下步驟,並在部分步驟中列出相對應的指令以供參考:
* 初始化專案的 git flow 設定
* 開發新功能(feature)
* 釋出專案(release)
* 緊急上版(hotfix)

以下教學需要使用到SourceTree,關於SourceTree官方網站請點以下連結
SourceTree下載連結 (Mac, Windows皆適用)

初始化專案的 git flow 設定

執行 SourceTree 點擊 Add Repository。

因為我們是建立一個新的空目錄,所以切換到 Create Repository頁面,輸入資訊後點擊 Create。

雙擊剛剛建立的 Repository。

因為整個專案都是空的,所以我們需要 commit 一次,以建立 master branch。

先在專案目錄下新增一個文字檔。

在 Working Copy頁面中,選取剛剛放進專案目錄中的文字檔,點擊 Add。

檔案就會從下方移到上方,準備 commit。接著點擊 Commit。

輸入 Commit message 後,點擊 Commit。

Commit 之後就可以看到 BRANCHES 下多出了 master。接下來就可以點擊 Git Flow 為專案初始化 git flow設定。

基本上不用再調什麼設定,直接點擊 OK。
參考指令:
1
git checkout -b develop master

完成後就會看到在 BRANCHES 下出現 develop 了,這樣就完成了 git flow 的初始化。

開發新功能(feature)

點擊 Git flow 開啟選單。

點擊 Start a New Feature。

輸入Feature Name,然後點擊 OK,建立新的 branch 用來開發新功能。
參考指令:
1
git checkout -b feature/f1 develop
view rawstart_feature.sh hosted with ❤ by GitHub

在 BRANCHES 下可以看到新增了 feature/f1 這個 branch,我們在這 branch 上開發新功能。

在專案目錄下新增一檔案,用來代表新功能,接下來就是老樣子的 commmit 動作。
這邊我們隨意建了一個新檔案叫做main.c!

在 Working Copy頁面中,選取剛剛放進專案目錄中的檔案,點擊 Add。

檔案就會從下方移到上方,準備 commit。接著點擊 Commit。

輸入 Commit message 後,點擊 Commit。

回到 BRANCHES,因為新功能完成了,所以我們要將 feature/f1 merge 回 develop。點擊 Git Flow 叫出選單。

因為目前我們在 feature/f1 上,所以點擊 Finish Current就可以了。

這邊直接點擊 OK。
參考指令:
123
git checkout develop
git merge --no-ff feature/f1
git branch -d feature/f1
view rawfinish_feature.sh hosted with ❤ by GitHub

回到只有 develop 與 master 兩個 branch 的狀態了。重複以上動作直到功能開發完成,就要進行下一個步驟,釋出專案給使用者。

釋出專案(release)

當功能都開發完成之後,就可以進行準備釋出專案,在這 release branch 上做的動作主要就是修改版本號之類的釋出設定。
釋出專案的話,就代表你開發完成了要出去給測試或是準備上架囉!!

點擊 Git Flow。

點擊 Start a New Release。

輸入版本號,點擊 OK(預設是從 develop 最新的版本分支)。
參考指令:
1
git checkout -b release/v0.1.0 develop
view rawstart_release.sh hosted with ❤ by GitHub

在 BRANCHES 下可以看到出現了 release/v0.1.0 的 branch。

現在讓我們修改一下專案目錄下的 README.md 的內容,加上版本號資訊後存檔。
(畫面中使用的是 Mou Markdown 編輯器, 在Mac上編輯README相當好用, 有機會Bear再詳加介紹) 

接下來 commit 剛剛的變更,一樣切換到 Working Copy 頁面,選取變更的檔案,點擊 Add。

點擊 Commit。

輸入 Commit message 後點擊 Commit。

回到 BRANCHES 頁面,可以看到 Graph 有變動了。接下來請點擊 Git Flow。

因為目前我們正在 release/v0.1.0 branch,所以直接點擊 Finish Current。

點擊 OK。請注意在 Git Flow 流程中,release branch 只負責釋出設定與修正 bug,千萬不要在上面開發新功能。
參考指令:
123456789
git checkout master
git merge --no-ff release/v0.1.0
 
git tag -a v0.1.0
 
git checkout develop
git merge --no-ff release/v0.1.0
 
git branch -d release/v0.1.0
view rawfinish_release.sh hosted with ❤ by GitHub

Graph 就會出現了變更,release/v0.1.0 會 merge 到 master 跟 develop。並在 master 上標上 v0.1.0 的 tag。
經由以上步驟,我們就學會了依照 Git Flow 從開發到釋出的流程。

緊急上版(hotfix)

當專案釋出之後,可能才發現有重大的錯誤,
但一時之間新功能也正在開發,無法及時釋出新版本.....
這時候可以從  master 分支出 hotfix branch 做緊急上版。

假設目前專案正在進行新功能的開發,如上圖所示,但突然發現版本v0.1.0有錯誤需要馬上修改。請點擊 Git Flow。

因為目前我們在正 feature/f2 branch上,所以我們點擊 Other Action…開啟選單。

點擊 Start Hotfix。

輸入版本號,因為目前我們要修正的版本是v0.1.0,所以按照慣例這裡輸入v0.1.1。點擊 OK。
參考指令:
1
git checkout -b hotfix/v0.1.1 master
view rawstart_hotfix.sh hosted with ❤ by GitHub

可以看到 Graph 發生了變動,hotfix/v0.1.1是從 master 分支出來的,接下來就可以修正錯誤,這邊就不再重複講述 commmit 的步驟。

錯誤已經修復好也 commit 了,接下來就是釋出更新的版本。請點擊 Git Flow。

因為目前我們就在 hotfix/v0.1.1上,所以直接點擊 Finish Current。

點擊 OK。
參考指令:
123456789
git checkout master
git merge --no-ff hotfix/v0.1.1
 
git tag -a v0.1.1
 
git checkout develop
git merge --no-ff -b hotfix/v0.1.1
 
git branch -d hotfix/v0.1.1
view rawfinish_hotfix.sh hosted with ❤ by GitHub

可以在 Graph 中看到了變更,hotfix/v0.1.1 會 merge 到 master 跟 develop。並在 master 上標上 v0.1.1 的 tag。之後再切換到 feature/f2 繼續開發新功能。

參考網站:
A successful Git branching model
Git flow 開發流程
Git-flow 使用笔记
Git 版本控制 branch model 分支模組基本介紹

 
 
 

Bear 實驗室: 什麼是Git flow ? 如何在SourceTree使用Git flow管理開發!的更多相关文章

  1. 在Ubuntu 16.10 安装 git 并上传代码至 git.oschina.net

    1. 注册一个账号和创建项目 先在git.oschina.net上注册一个账号和新建一个project ,如project name 是"myTest". 2.安装git sudo ...

  2. 代码管理工具 --- git的学习笔记二《git的工作原理》

    通过几个问题来学习代码管理工具之git 一.git是什么?为什么要用它?使用它的好处?它与svn的区别,在Mac上,比较好用的git图形界面客户端有 git 是分布式的代码管理工具,使用它是因为,它便 ...

  3. 代码管理工具 --- git的学习笔记一《git的个人开发》

    重点摘要: 创建了一个文件后首先先通过git add . 添加到暂缓区,然后通过git commit -m "提交的名字" 提交到本地仓库,最后才可能push到远程仓库. 1. 个 ...

  4. 【Git】关于VSCode 内置Git问题

    VSCode的内置git是自动关联本机git的, 所以当提交代码时,VSCode提示[警告:请配置git用户名和账户]时, 只需要在git bash 端配置git config --gobal use ...

  5. git上传代码到osc@git

    1.get an account 2.get a ssh-key 3.git setting git config --global user.name "...." git co ...

  6. python解析git log后生成页面显示git更新日志信息

    使用git log可以查到git上项目的更新日志. 如下两个git项目,我想把git的日志信息解析成一个便于在浏览器上查看的页面. https://github.com/gityf/lua https ...

  7. Git使用指南(1)——Git配置命令

    配置用户信息 git config --global user.name bongxin git config --global user.email bongxin@yeah.net 配置文本编辑器 ...

  8. git学习:多人协作,标签管理

    多人协作: 查看远程库的信息, git remote 推送分支到远程库 git push origin master/dev 注意:master是主分支,时刻需要与远程同步 dev是开发分支,也需要与 ...

  9. 2015继续任性——不会Git命令,照样玩转Git

    最近事情比较多,一眨眼,已经半个月没有写博客了~不得不感慨光阴似箭啊!当然,2015年有很多让我们期待的事情,比如win10正式版..NET开源.VS2015等等.想想都让人兴奋啊~~ 为了迎接VS2 ...

随机推荐

  1. Html+CSS命名规范:

     Html+CSS命名规范: 1.样式命名: 2.样式文件命名:

  2. mysql的分区技术

    一.概述 当 MySQL的总记录数超过了100万后,会出现性能的大幅度下降吗?答案是肯定的,但是,性 能下降>的比率不一而同,要看系统的架构.应用程序.还有>包括索引.服务器硬件等多种因素 ...

  3. ios 调用js方法(ios监听js方法执行)

    下载地址 https://pan.baidu.com/s/1cJvEsY

  4. libsdl中文输入法候选列表不显示解决方案

    libsdl输入中文时输入法不显示,将WM_IME_SETCONTEXT事件处理给注释即可. WM_IME_SETCONTEXT If the application draws the compos ...

  5. 九度OJ 1124 Digital Roots -- 数位拆解

    题目地址:http://ac.jobdu.com/problem.php?pid=1124 题目描述: The digital root of a positive integer is found ...

  6. OpenJudge 2790 迷宫

    1.链接地址: http://bailian.openjudge.cn/practice/2790/ 2.题目: 总时间限制: 3000ms 内存限制: 65536kB 描述 一天Extense在森林 ...

  7. HTTP协议-标签简介

    这个系列的文章要讨论的是如何通过ASP.net服务器端技术来优化客户端缓存策略,而且让这种策略变得可配置和可扩展.我们要了解的知识从HTTP协议中相关属性对客户端缓存的影响,到ASP.NET如何控制这 ...

  8. php单入口session处理

    if (isset($_SERVER['HTTP_HOST'])) { if(!empty($_POST['PHPSESSID'])) session_id($_POST['PHPSESSID']); ...

  9. 【python】for循环一列

    a="哈哈哈哈,笑死我了"for i in a: print (i, end=' ') 结果 哈 哈 哈 哈 , 笑 死 我 了

  10. zzuli oj 1146 吃糖果

    Description HOHO,终于从Speakless手上赢走了所有的糖果,是Gardon吃糖果时有个特殊的癖好,就是不喜欢连续两次吃一样的糖果,喜欢先吃一颗A种类的糖果,下一次换一种 口味,吃一 ...