SlideShare a Scribd company logo
Git & Git flow
從小木屋到世界奇觀
Agenda
• VCS
• Git
• Git Flow
VCS Version Control System
版本控制系統
為什麼需要版本控制?
為什麼需要版本控制?
• 檔案被別人或自己覆蓋、甚至遺失
為什麼需要版本控制?
• 檔案被別人或自己覆蓋、甚至遺失
• 想復原前幾天寫的版本
為什麼需要版本控制?
• 檔案被別人或自己覆蓋、甚至遺失
• 想復原前幾天寫的版本
• 想知道跟前幾天寫的差異在哪裏
為什麼需要版本控制?
• 檔案被別人或自己覆蓋、甚至遺失
• 想復原前幾天寫的版本
• 想知道跟前幾天寫的差異在哪裏
• 誰改了這行程式碼?為什麼?
為什麼需要版本控制?
• 檔案被別人或自己覆蓋、甚至遺失
• 想復原前幾天寫的版本
• 想知道跟前幾天寫的差異在哪裏
• 誰改了這行程式碼?為什麼?
• 程式上線後,需要分成維護版和開發版
所以我們需要一些機制
所以我們需要一些機制
• 檔案被別人或自己覆蓋、甚至遺失
• 想復原前幾天寫的版本
• 想知道前幾天寫的差在哪裏
• 誰改了這行程式碼?為什麼?
• 程式上線後,需要分成維護版和開發版
所以我們需要一些機制
• 檔案被別人或自己覆蓋、甚至遺失
• 想復原前幾天寫的版本
• 想知道前幾天寫的差在哪裏
• 誰改了這行程式碼?為什麼?
• 程式上線後,需要分成維護版和開發版
所以我們需要一些機制
• 檔案被別人或自己覆蓋、甚至遺失
多人協作,不會把別人的東西蓋掉
• 想復原前幾天寫的版本
• 想知道前幾天寫的差在哪裏
• 誰改了這行程式碼?為什麼?
• 程式上線後,需要分成維護版和開發版
所以我們需要一些機制
• 檔案被別人或自己覆蓋、甚至遺失
多人協作,不會把別人的東西蓋掉
• 想復原前幾天寫的版本
• 想知道前幾天寫的差在哪裏
• 誰改了這行程式碼?為什麼?
• 程式上線後,需要分成維護版和開發版
所以我們需要一些機制
• 檔案被別人或自己覆蓋、甚至遺失
多人協作,不會把別人的東西蓋掉
• 想復原前幾天寫的版本
可以隨時復原修改,回到之前的版本
• 想知道前幾天寫的差在哪裏
• 誰改了這行程式碼?為什麼?
• 程式上線後,需要分成維護版和開發版
所以我們需要一些機制
• 檔案被別人或自己覆蓋、甚至遺失
多人協作,不會把別人的東西蓋掉
• 想復原前幾天寫的版本
可以隨時復原修改,回到之前的版本
• 想知道前幾天寫的差在哪裏
• 誰改了這行程式碼?為什麼?
• 程式上線後,需要分成維護版和開發版
所以我們需要一些機制
• 檔案被別人或自己覆蓋、甚至遺失
多人協作,不會把別人的東西蓋掉
• 想復原前幾天寫的版本
可以隨時復原修改,回到之前的版本
• 想知道前幾天寫的差在哪裏
• 誰改了這行程式碼?為什麼?
保留修改歷史記錄,以供查詢
• 程式上線後,需要分成維護版和開發版
所以我們需要一些機制
• 檔案被別人或自己覆蓋、甚至遺失
多人協作,不會把別人的東西蓋掉
• 想復原前幾天寫的版本
可以隨時復原修改,回到之前的版本
• 想知道前幾天寫的差在哪裏
• 誰改了這行程式碼?為什麼?
保留修改歷史記錄,以供查詢
• 程式上線後,需要分成維護版和開發版
所以 VCS 就誕生了
\\٩( 'ω' )‫و‬ ////
VCS的歷史
黑暗時代
Local VCS 資料夾管理法
Git & git flow
Git & git flow
Git & git flow
Git & git flow
Git & git flow
Git & git flow
COPY
Git & git flow
Git & git flow
Git & git flow
Git & git flow
Git & git flow
Git & git flow
Git & git flow
Git & git flow
Git & git flow
封建時代
Centralized VCS (Lock Ver.)
Server 大陸
Server 大陸
Server 大陸
Server 大陸
Ceckout
Server 大陸
Lock Request
Server 大陸
Server 大陸
Server 大陸
Commit
Server 大陸
Checkout
Server 大陸
Lock Request
Server 大陸
Server 大陸
Server 大陸
Commit
Server 大陸
Checkout
Server 大陸
Lock Request
Server 大陸
我是過了很久的時間線...
Server 大陸
Server 大陸
Server 大陸
Git & git flow
城堡時代
Centralized VCS (Merge Ver.)
Server 大陸
Server 大陸
Ceckout
Server 大陸
Commit
Server 大陸
Commit
Server 大陸
Merge
Server 大陸
Server 大陸
Server 大陸
Commit
Server 大陸
Conflict
Git & git flow
但是...
Server 大陸
Server 大陸
Server 大陸
Commit
Server 大陸
Server 大陸
Server 大陸
Server 大陸
Git & git flow
Git & git flow
Git & git flow
帝王時代
Distributed VCS
Server 大陸
Server 大陸
Server 大陸
Server 大陸
Clone
Server 大陸
Checkout Checkout
Server 大陸
Server 大陸
Commit
Server 大陸
Server 大陸
Push
Server 大陸
Server 大陸
Server 大陸
Commit
Server 大陸
Server 大陸
Push
Server 大陸
Push
Server 大陸
Pull
Server 大陸
Merge
Server 大陸
Push
Server 大陸
Git & git flow
Commit Commit
Git & git flow
Git
簡介
Git & git flow
Linus Torvalds Linux之父
Linux Kernel
Open Source
Distribute VCS
所有內容都在本地端
開分支成本低
快
省空間
Git & git flow
Git
基本操作
Server 大陸
Server 大陸
Origin / Remote
Server 大陸
Origin / Remote
Repository
Server 大陸
Working Copy
Server 大陸
Server 大陸
$ git clone <URL>
Server 大陸
Git & git flow
$ git checkout <branch>
Git & git flow
Commit
Git & git flow
Staging area
Staging area
Staging area
Staging area
$ git add <file>
Staging area
Staging area
Staging area
$ git commit
Staging area
Staging area
Server 大陸
Server 大陸
$ git push <remote>
Server 大陸
Server 大陸
Git & git flow
Git flow
邁向世界奇觀
Git flow 是什麼?
一套管理開發和版本分支的流程
http://danielkummer.github.io/git-flow-cheatsheet/
兩個主要分支
master
永遠處在 Production ready 穩定狀態
master
永遠處在 Production ready 穩定狀態
develop
最新的下次發佈開發狀態
三個支援分支
feature
● 開發新功能或修 Bugs
feature
● 開發新功能或修 Bugs
● 從 develop 分支出來
feature
● 開發新功能或修 Bugs
● 從 develop 分支出來
● 完成後 merge 回 develop
feature
● 開發新功能或修 Bugs
● 從 develop 分支出來
● 完成後 merge 回 develop
release
feature
● 開發新功能或修 Bugs
● 從 develop 分支出來
● 完成後 merge 回 develop
release
● 準備要 release 的版本,只修 Bugs
feature
● 開發新功能或修 Bugs
● 從 develop 分支出來
● 完成後 merge 回 develop
release
● 準備要 release 的版本,只修 Bugs
● 從 develop 分支出來
feature
● 開發新功能或修 Bugs
● 從 develop 分支出來
● 完成後 merge 回 develop
release
● 準備要 release 的版本,只修 Bugs
● 從 develop 分支出來
● 完成後 merge 回 master 和 develop
feature
● 開發新功能或修 Bugs
● 從 develop 分支出來
● 完成後 merge 回 develop
release
● 準備要 release 的版本,只修 Bugs
● 從 develop 分支出來
● 完成後 merge 回 master 和 develop
hotfix
feature
● 開發新功能或修 Bugs
● 從 develop 分支出來
● 完成後 merge 回 develop
release
● 準備要 release 的版本,只修 Bugs
● 從 develop 分支出來
● 完成後 merge 回 master 和 develop
hotfix
● 等不及 release 版本,必須馬上修
master 趕上線
feature
● 開發新功能或修 Bugs
● 從 develop 分支出來
● 完成後 merge 回 develop
release
● 準備要 release 的版本,只修 Bugs
● 從 develop 分支出來
● 完成後 merge 回 master 和 develop
hotfix
● 等不及 release 版本,必須馬上修
master 敢上線
● 從 master 分支出來
feature
● 開發新功能或修 Bugs
● 從 develop 分支出來
● 完成後 merge 回 develop
release
● 準備要 release 的版本,只修 Bugs
● 從 develop 分支出來
● 完成後 merge 回 master 和 develop
hotfix
● 等不及 release 版本,必須馬上修
master 敢上線
● 從 master 分支出來
● 完成後 merge 回 master 和 develop
Git flow 如何運作?
第一個 commit 節點
master
第一個 commit 節點
$ git flow init
master
master
develop
master
develop
$ git flow feature start XXX
feature
develop
develop
feature
develop
feature
$ git flow feature start YYY
Git & git flow
Git & git flow
$ git flow feature finish XXX
develop
develop
$ git flow feature finish YYY
develop
Release
develop
develop
$ git flow release start v1.0.0
develop
release 支線 (v1.0.0)
release v1.0.0
release v1.0.0
release v1.0.0
$ git flow release finish v1.0.0
Git & git flow
v1.0.0
tag
v1.0.0
Hotfix
master
master
$ git flow hotfix start v1.0.1
master
hotfix 支線 (v1.0.1)
v1.0.0
hotfix v1.0.1
v1.0.0
hotfix v1.0.1
v1.0.0
hotfix v1.0.1
$ git flow hotfix finish v1.0.1
v1.0.0
develop
v1.0.0
developv1.0.1
v1.0.0
develop
v1.0.1
master
master
master
develop
master
develop
master
develop
feature
feature
master
develop
feature
feature
master
develop
feature
master
develop
feature
master
develop
master
develop
master
develop
release v1.0.1
master
develop
release v1.0.1
master
develop
release v1.0.1
master
develop
v1.0.0
master
develop
v1.0.0
hotfix v1.0.1
master
develop
v1.0.0
hotfix v1.0.1
master
develop
v1.0.0
master
develop
v1.0.0 v1.0.1
master
develop
v1.0.0 v1.0.1
master
feature
v1.1.0
Policy
Developer
Developer
● 一般開發者只開 feature branch,完成後發 pull
request 做 code review
Developer
Developer
Leader
● 一般開發者只開 feature branch,完成後發 pull
request 做 code review
● 只有 Project Leader 可以 commit & merge 進 develop
branch
Developer
Developer
Leader
● 一般開發者只開 feature branch,完成後發 pull
request 做 code review
● 只有 Project Leader 可以 commit & merge 進 develop
branch
● 只有 Production Team 可以管理 master branch
Production Team
Developer
Developer
Leader
Production Team
● 一般開發者只開 feature branch,完成後發 pull
request 做 code review
● 只有 Project Leader 可以 commit & merge 進 develop
branch
● 只有 Production Team 可以管理 master branch
终わり
Git & git flow

More Related Content

PPT
Git flow
PPTX
Git and git hub
PDF
A successful git branching model 導讀
PPTX
開發用不著打一架 - 分散式版本控制 Git
PPTX
git merge 與 rebase 的觀念與實務應用
PDF
git, repo, Gerrit 基礎教學
PDF
Git 版本控制 (使用教學)
PPTX
Git flow 與團隊合作
Git flow
Git and git hub
A successful git branching model 導讀
開發用不著打一架 - 分散式版本控制 Git
git merge 與 rebase 的觀念與實務應用
git, repo, Gerrit 基礎教學
Git 版本控制 (使用教學)
Git flow 與團隊合作

What's hot (20)

PDF
Git 經驗分享
PDF
寫給大家的 Git 教學
PDF
Git與source tree 基礎教學
PDF
Git tutorial for windows user (給 Windows user 的 Git 教學)
PDF
Introduction to git
PDF
Xcode 的 git 版本管理
PPTX
工程師必備第一工具 - Git
PPTX
Visual Studio 2015 與 Git 開發實戰
PPTX
Gitlab
PPTX
Git基礎介紹
PDF
如何與 Git 優雅地在樹上唱歌
PPTX
電子內容管理 使用Git 與 github 1
PDF
Use Git-flow Manage Your Git Workflow
PDF
Git in a nutshell
PDF
版本控制 使用Git & git hub
PDF
Git 入门实战
PPT
Git share
PDF
Git Tutorial 教學
PDF
Git and Github basic with SourceTree
PPTX
Git 入門與實作
Git 經驗分享
寫給大家的 Git 教學
Git與source tree 基礎教學
Git tutorial for windows user (給 Windows user 的 Git 教學)
Introduction to git
Xcode 的 git 版本管理
工程師必備第一工具 - Git
Visual Studio 2015 與 Git 開發實戰
Gitlab
Git基礎介紹
如何與 Git 優雅地在樹上唱歌
電子內容管理 使用Git 與 github 1
Use Git-flow Manage Your Git Workflow
Git in a nutshell
版本控制 使用Git & git hub
Git 入门实战
Git share
Git Tutorial 教學
Git and Github basic with SourceTree
Git 入門與實作
Ad

Viewers also liked (8)

ODP
Get Familiar With Git
PDF
Introduction to Ruby
PPT
Git training
PPT
Ruby Basics
 
KEY
Git branching-model
PDF
Getting Git Right
PDF
Git Branching Model
Get Familiar With Git
Introduction to Ruby
Git training
Ruby Basics
 
Git branching-model
Getting Git Right
Git Branching Model
Ad

Similar to Git & git flow (20)

PPT
Learn git
PDF
Git 版本控制系統 -- 從微觀到宏觀
PPT
Github简介及实用入门
PPTX
Git Flow 管理
PPTX
Git内部培训文档
PPTX
Git原理与实战 201607
PDF
Intro to Git 投影片
PPTX
Github簡介
PDF
COSCUP 2015 開源之道-Git工作坊教學簡報
PPT
Git 超簡單學習懶人包(軟體程式版本控管系統)
PPT
Version control0221
PPTX
Android 程式設計(4)
PPTX
Git Essence Tutorial
PDF
Git&Github Tutorial
PDF
Learning to Use Git | WeiYuan
ODP
Git 程式碼版本控制軟體介紹
PPTX
Git 使用介绍
PPTX
Git教學
PPTX
Git introduction
PPTX
GIT實務操作與理論
Learn git
Git 版本控制系統 -- 從微觀到宏觀
Github简介及实用入门
Git Flow 管理
Git内部培训文档
Git原理与实战 201607
Intro to Git 投影片
Github簡介
COSCUP 2015 開源之道-Git工作坊教學簡報
Git 超簡單學習懶人包(軟體程式版本控管系統)
Version control0221
Android 程式設計(4)
Git Essence Tutorial
Git&Github Tutorial
Learning to Use Git | WeiYuan
Git 程式碼版本控制軟體介紹
Git 使用介绍
Git教學
Git introduction
GIT實務操作與理論

More from Amo Wu (7)

PPT
Microsoft XNA Game Studio 2D 連線動作遊戲
PDF
物件導向程式設計實習成果報告
PDF
實務專題競賽報告
PPTX
JavaScript 開發實務分享
PPTX
Productivity tool
PPTX
GuMorning 開發分享
PPTX
Trello
Microsoft XNA Game Studio 2D 連線動作遊戲
物件導向程式設計實習成果報告
實務專題競賽報告
JavaScript 開發實務分享
Productivity tool
GuMorning 開發分享
Trello

Git & git flow

Editor's Notes

  • #2: 將版本分支管理好,讓開發與出版本順利。
  • #4: 這裡貼一張坂本龍馬的圖 :P
  • #5: 檔案會遺失、檔案會被別人覆蓋、想復原之前某版本、想知道版本差異、誰改了什麼?為什麼?、程式上線需要分維護版和開發版。
  • #20: Repository保存程式碼,commity、checkout方便散佈程式碼給團隊,log記錄誰改變什麼、什麼時候、為什麼,branch可因情境分開開發,tag重要里程碑、方便參照。
  • #22: 易衝突、無法協同作業
  • #39: Lock Unlock 不方便
  • #61: CVS、SVN,每個動作都需要網路連線、單點故障麻煩。
  • #71: 城堡圖
  • #83: Git、Mercurial,可以蓋世界奇觀了。
  • #111: 與CVS、Subversion一類的集中式版本控制工具不同,它採用了分布式版本庫的作法,不需要伺服器端軟體,就可以運作版本控制,使得原始碼的釋出和交流極其方便。
  • #118: git clone <URL>; git init, git remote add origin <URL>
  • #119: git clone <URL>; git init, git remote add origin <URL>
  • #120: git clone <URL>; git init, git remote add origin <URL>
  • #121: git clone <URL>; git init, git remote add origin <URL>
  • #122: git clone <URL>; git init, git remote add origin <URL>
  • #123: git clone <URL>; git init, git remote add origin <URL>
  • #124: git clone <URL>; git init, git remote add origin <URL>
  • #128: - touch README; git add README; git status; git commit -m ‘Add REAMD’; - working copy/staging area/repository - working tree 亂,包含了想 commit 和不相關的東西,staging area 讓你只放想 commit 的檔案或修改。 - 適當粒度/相關性/獨立性; commit msg,第一行摘要,第二行詳細。
  • #139: git clone <URL>; git init, git remote add origin <URL>
  • #140: git clone <URL>; git init, git remote add origin <URL>
  • #141: git clone <URL>; git init, git remote add origin <URL>
  • #142: git clone <URL>; git init, git remote add origin <URL>
  • #146: master develop
  • #149: Feature/Release/Hotfix