SlideShare a Scribd company logo
1 of 40
Git流派(Branching models)
與
工作流程(Workflow)
Outline
- 工作流程
- Git流程
- Git Flow
- Github Flow
- Gitlab Flow
- TBD
就幹話, 想講啥就說啥
沒Flow是不是一種Flow?
真男人!
就應該直接commit在
main上
Master ?
Main?
2020
What is Flow?
Flow = 流程 = 遊戲規則
沒Flow的優缺
優 : 簡單直接
缺 : 人多就雜就亂
開Branch的意義?
Branching is a core concept in Git, and
the entire GitHub Flow is based upon it.
There's only one rule: anything in the
master branch is always deployable.
Git Branching
啊! 用Git就是要開分支啊!
一個Branch約 30-41 Bytes
(sha + 空格)
比雞蛋還便宜!
開爛
2010被提出
有兩條long-lived branch : master & develop
release : internal test, partial modify
hotfix : very urgent issue
優點 : 歷史紀錄保存完整清晰
缺點 : 流程複雜, 對Git熟練度有一定考驗
不同的功能散落在不同的branch
能想看看這在大型團隊與快速交付價值上有什麼問題
2011年被Github提出
只有1條long-lived branch : master
PullRequest * 1
優點 : 超級簡單
缺點 : 太簡單了!
需要多個版本
沒要立刻發布
需要有良好的基礎建設(自動化, 測試, 回滾...)
2016被Gitlab提出
1條long-lived (upstream) branch : main
1條long-loved branch for deploy : production
MergeRequest * n個
如果提交/合併順序與上線的不同 : cherry-pick
第一個2.3-stable的版本, 在upstream上commit修正後, 利用cherry-
pick挑剛剛在upstream分支上的commit, 發布到2.3-stable上.
(Google Chromium和Red Hat也是如此)
Why Cherry? Not Apple? Not Banana?
OXford
Github Flow : Pull Request
Gitlab Flow : Merge Request
Git Pull Process
流程一樣, 只是命名跟平台實現細節有點差異
優點 :
- 提供了一個結構化方法
與標準化的流程
- 可以進行審查/診斷掃描
等 CI流程, 增加質量與
減少錯誤
缺點 :
- 基礎建設需要額外的設置
與管理
- 需要一點點學習成本
Advanced Issue
不跟區塊鏈相關的沾點邊
很可能被懷疑來公司划水講幹話的
Git Object Storage like Merkle Tree?
Merkle Tree
快速校驗整個樹的
完整性、一致性
Live Demo
Git透過Merkle tree和DAG的結合使用,
就能作到快速校驗完整性以及
快速地進行版本操作(分支合併等等)
ps. Git就是一種基於DAG(Directed Acyclic Graph)
的版本控制系統
Advanced Workflow
TBD(Trunk Based Developement)
真男人!
就應該直接commit在
main上
1條long-lived branch : main (trunk 主幹/樹幹)
有要release, 開新分支
Feature Flag?
優: 簡單, 都在main
缺: 測試要完整、
基礎建設要完整、
團隊成員的程度要求高
有誰跑這流程呢?
Google
Facebook(Meta)
Microsoft
(IAC) Infrastructure as Code
不要為了Flow而Flow!
到底是團隊去適應Flow?
還是調整Flow來適應團隊!?
Finally
- Branch的作用?
- 多人協作時的優缺?
- 接著佈署到Testnet和Product之後, 會有HotFix
的需求, 如何定義好管理HotFix的發布與更新流
程呢?
今年下半年朋友會出第一本在台灣關於TBD的書,請多支持!
能購買Continuous Integration: impoving software quality and reducing risk這本神書

More Related Content

Similar to Git流派與工作流程.pptx

Git Flow 管理
Git Flow 管理Git Flow 管理
Git Flow 管理Pu Lee
 
Git 程式碼版本控制軟體介紹
Git 程式碼版本控制軟體介紹Git 程式碼版本控制軟體介紹
Git 程式碼版本控制軟體介紹PingLun Liao
 
Git flow
Git flowGit flow
Git flowshaokun
 
Git 版本控制系統 -- 從微觀到宏觀
Git 版本控制系統 -- 從微觀到宏觀Git 版本控制系統 -- 從微觀到宏觀
Git 版本控制系統 -- 從微觀到宏觀Wen-Tien Chang
 
Git tutorial for windows user (給 Windows user 的 Git 教學)
Git tutorial for windows user (給 Windows user 的 Git 教學)Git tutorial for windows user (給 Windows user 的 Git 教學)
Git tutorial for windows user (給 Windows user 的 Git 教學)Cloud Tu
 
Git flow 與團隊合作
Git flow 與團隊合作Git flow 與團隊合作
Git flow 與團隊合作Bo-Yi Wu
 
Git+使用教程
Git+使用教程Git+使用教程
Git+使用教程gemron
 
電子內容管理 使用Git 與 github 1
電子內容管理   使用Git 與 github 1電子內容管理   使用Git 與 github 1
電子內容管理 使用Git 與 github 1Alan Tsai
 
Git in a nutshell
Git in a nutshellGit in a nutshell
Git in a nutshellNelson Tai
 
寫給大家的 Git 教學
寫給大家的 Git 教學寫給大家的 Git 教學
寫給大家的 Git 教學littlebtc
 
Use Git-flow Manage Your Git Workflow
Use Git-flow Manage Your Git WorkflowUse Git-flow Manage Your Git Workflow
Use Git-flow Manage Your Git WorkflowLiangjun Jiang
 
COSCUP 2015 開源之道-Git工作坊教學簡報
COSCUP 2015 開源之道-Git工作坊教學簡報COSCUP 2015 開源之道-Git工作坊教學簡報
COSCUP 2015 開源之道-Git工作坊教學簡報Bachue Zhou
 
Git 入门实战
Git 入门实战Git 入门实战
Git 入门实战icy leaf
 
連哈秋都懂的Git教學
連哈秋都懂的Git教學連哈秋都懂的Git教學
連哈秋都懂的Git教學hydai
 
Git入门与实践
Git入门与实践Git入门与实践
Git入门与实践LC2009
 

Similar to Git流派與工作流程.pptx (20)

Git Flow 管理
Git Flow 管理Git Flow 管理
Git Flow 管理
 
Git 程式碼版本控制軟體介紹
Git 程式碼版本控制軟體介紹Git 程式碼版本控制軟體介紹
Git 程式碼版本控制軟體介紹
 
Git for everyone
Git for everyoneGit for everyone
Git for everyone
 
Git flow
Git flowGit flow
Git flow
 
Git 版本控制系統 -- 從微觀到宏觀
Git 版本控制系統 -- 從微觀到宏觀Git 版本控制系統 -- 從微觀到宏觀
Git 版本控制系統 -- 從微觀到宏觀
 
Git tutorial for windows user (給 Windows user 的 Git 教學)
Git tutorial for windows user (給 Windows user 的 Git 教學)Git tutorial for windows user (給 Windows user 的 Git 教學)
Git tutorial for windows user (給 Windows user 的 Git 教學)
 
Git flow 與團隊合作
Git flow 與團隊合作Git flow 與團隊合作
Git flow 與團隊合作
 
Git入門介紹
Git入門介紹Git入門介紹
Git入門介紹
 
Git+使用教程
Git+使用教程Git+使用教程
Git+使用教程
 
電子內容管理 使用Git 與 github 1
電子內容管理   使用Git 與 github 1電子內容管理   使用Git 與 github 1
電子內容管理 使用Git 與 github 1
 
Git 版本控制 (使用教學)
Git 版本控制 (使用教學)Git 版本控制 (使用教學)
Git 版本控制 (使用教學)
 
Git in a nutshell
Git in a nutshellGit in a nutshell
Git in a nutshell
 
寫給大家的 Git 教學
寫給大家的 Git 教學寫給大家的 Git 教學
寫給大家的 Git 教學
 
Use Git-flow Manage Your Git Workflow
Use Git-flow Manage Your Git WorkflowUse Git-flow Manage Your Git Workflow
Use Git-flow Manage Your Git Workflow
 
Git簡報
Git簡報Git簡報
Git簡報
 
COSCUP 2015 開源之道-Git工作坊教學簡報
COSCUP 2015 開源之道-Git工作坊教學簡報COSCUP 2015 開源之道-Git工作坊教學簡報
COSCUP 2015 開源之道-Git工作坊教學簡報
 
Git 入门实战
Git 入门实战Git 入门实战
Git 入门实战
 
Git Branch Practice
Git Branch PracticeGit Branch Practice
Git Branch Practice
 
連哈秋都懂的Git教學
連哈秋都懂的Git教學連哈秋都懂的Git教學
連哈秋都懂的Git教學
 
Git入门与实践
Git入门与实践Git入门与实践
Git入门与实践
 

Git流派與工作流程.pptx

Editor's Notes

  1. 如果某個提交在審查期間被駁回或修改,而其他提交已經合併並上線,那麼為了能夠上線該修改,需要使用 cherry-pick 將其應用到上線的分支中。 cherry-pick 命令的作用是將指定提交的更改應用到當前分支中,這樣就可以將某個提交的更改應用到另一個分支中。 然而,使用 cherry-pick 也可能會帶來一些風險,因為它可以導致分支之間的代碼差異性,並使代碼庫的歷史記錄變得複雜。因此,建議在使用 cherry-pick 時,應當非常小心,確保它不會導致代碼庫的不穩定性。 又或是我需要另一個feature-branch已經好的commit的功能, 也能使用cherry-pick 又或者product branch有bug, 可能有人會從前一個長期分支做cherry pick hotfix commit的動作, 避免將還沒要上線的給整合發布 但這東西其實用得太多,會導致後期管理困難
  2. init -> create file , commit -> create more files , and commit -> create branch ->modify file, commit -> tag tree .git => 將.git folder以tree狀方式展開其內容; 能看到objects有東西產生了 git cat-file -t sha1 => 將sha1 object的type看是blob, commit, tree git cat-file blob sha1 => 看sha1 blob的內容 git cat-file commit sha1 => 看sha1 commit的內容 git cat-file tree sha1 => 看sha1 tree的內容 tree .git/refs/ => show heads of branch and tags cat .git/refs/heads/[master] => show head指向哪裡 cat .git/HEAD => show head指向哪裡 git ls-tree commitid | git mktree =>建立tree物件 git ls-file –others => 列出沒被追蹤的文件
  3. 多人協作時, 可以隔離出一個人有獨立的工作空間 branch可以使不同的任務分別(平行)開發, 增加效率 版本管理時, 也能藉由branch分離多版本(revert / merge) 缺點: 容易在合併時發生衝突 很容易有分支很久很久才要去合併 多人協作時, 開不同分支, 有可能有重工問題 很多長生命分支時, 開發或是佈署該以哪個為主?