SlideShare uma empresa Scribd logo
1 de 33
讓他來告訴你
- 開發用不著打一架 -
分散式版本控制 - Git
Calvin Huang
WHY Git
• 大家都用Git
• Github超屌(那你知道Github用Rails做的嗎?該寫
Rails囉)
• 所以我一定也要用Git
WHY Git
• 強大的Branching能力
• 不用那麼害怕conflict(雖然說這樣,但騷年,你還是
應該要怕conflict)
• 月光寶盒
WHAT IS Git
• Github(不對!)
• 分散式版本控制系統,不用伺服器端軟體就可以運用
版本控制。
• 每個commit都會建立一份檔案的快照(Snapshot)
• 無痛分支
• Push到remote前可以做很多壞事
先從Git上岔開來看一下
有聽過SVN(Subversion)嗎?
• 傳統集中式版本控制系統
• 每一個commit都算一次版號增加(如果將每一次小功能完成就
commit一次版號無限增加很可怕)
• 如果遇到conflict,Lock-Modify-Unlock或是Copy-Modify-Merge。
• brach merge不會紀錄任何merge的資訊,所以很容易造成一堆
conflict
• 其實也有revert,但僅限於尚未commit前,已經送出去的想追回來
還頗麻煩
HOW TO Git
• 基本功的add, commit, pull, push, reset, checkout
• 重要的branch, merge, rebase, diff……
• 還有很多其他的像是stash, blame……
HOW Git WORKS
SVN這樣做
Git全都記
HOW Git WORKS
Git 的 Repository 又稱作 Object Database 資料庫,共有四種
Objects 類型:
• Blob 記錄檔案內容
• Tree 記錄該目錄下有哪些檔案(檔名、內容的SHA1)和
Trees
• Commit 記錄 commit 訊息、Root tree 和 Parent commits 的
SHA1
• Tag 記錄標籤
HOW Git WORKS
參照 Reference
• Reference 會指向一個 Commit
• tag 不會移動,指向的 commit 都一樣
• (帶有額外資訊的 tag 內部會用 Object 儲存)
• branch 指向該 branch 最新的 commit
• HEAD 指向 current branch
先暫時簡單介紹到這邊
其實重點一直著重在兩點上面
• 開branch不用錢
• 可以完美的建立分離的工作環境(啊奇怪在我的環境
下可以跑啊怎麼到你那邊就不行了)
既然如此,可以怎麼做
• 新功能要寫 - 開branch,有Bug要修 - 開branch,重
構開branch,總之想幹嘛先開branch就對了
branch~~有code要改救救我
開branch的好處
• 確保工作分配
• 避免互相影響(壞的方面)
• 專案開發進度清晰化
所以,我們就這樣開branch
BUT……!?
branch管理又是一門大哉問
• 所以有人提出了gitflow
gitflow - 主要分兩條
▪ 主要分支
▪ master: 永遠處在 production-ready 狀態
▪ develop: 最新的下次發佈開發狀態
直接copy from - https://ihower.tw/blog/archives/5140
gitflow - 剩下的分三條
支援性分支
▪ Feature branches: 開發新功能都從 develop 分支出來
,完成後 merge 回 develop
▪ Release branches: 準備要 release 的版本,只修 bugs
。從 develop 分支出來,完成後 merge 回 master 和
develop
▪ Hotfix branches: 等不及 release 版本就必須馬上修
master 趕上線的情況。會從 master 分支出來,完成後
merge 回 master 和 develop
直接copy from - https://ihower.tw/blog/archives/5140
聽起來很麻煩?
• 其實有工具可以用(不過個人覺得release可以等同
master,所以branch還是偏好自己開)
https://github.com/nvie/gitflow
小劇場加碼 - 怎麼整理branch
今天有一個功能要開發
不過把工作內容再細分後分派給不同人員進行開發
小劇場加碼 - 怎麼整理branch
如果直接merge回去的話似乎有點雜亂
不過線圖一多就總有種好像工作效率超好做很多事情的錯覺?
小劇場加碼 - 怎麼整理branch
本是同一個大功能Message
所以在Voice Message上rebase到Message
小劇場加碼 - 怎麼整理branch
再來使用merge fast forward的方式把兩條合併
小劇場加碼 - 怎麼整理branch
小時候媽媽有說過
push出去的branch不要rebase知不知道
我知道我知道,但還真不知道為什麼
push出去的branch其實會拒絕你
• 因為當push到remote server,別人pull了那一份,天
曉得你把哪個commit改掉了
• push —force可以強制更動,不過協作者要push的他
那份修改會被禁止
• 這時候就要reset到被你rebase的那一個commit重新
整合
協作的精神就是討論
pull request強制性的要求雙方共同檢視修改
協作的精神就是討論
pull request強制性的要求雙方共同檢視修改
嗯?你說剛剛都是說Github?
不,其實同樣的東西Gitlab上面也有
結論:Git讓程序猿們相處融洽
誰寫的醜先拖出來斬了就不會有問題
做後端很常遇到,其實app也會
需要拿測試版給測試人員的時候?
• 如果我們在開發後需要打包/重啟環境以便提供最新
版本的程式給不存在的QA或是PM的時候,每一次都
要等個好幾分鐘或是又要輸入指令重開真是有夠麻煩
同場加映
只有一點點LA
持續集成工具 - CI
• 自動建置
• 自動化測試
• code分析
• 自動部署
• 自動整合資料庫
• 取得系統健康度
資料參考
• Git-scm - http://git-scm.com/book/en/v2/Getting-Started-Git-Basics#Snapshots,-Not-Differences
• 連猴子都懂得Git入門指南 - http://backlogtool.com/git-guide/tw/
• SVN衝突(conflict)的介紹與解決 -
http://www.cc.ntut.edu.tw/~wkchen/game/SVN%20documents/SVNConflictOverview.pdf
• svn 回復到前一版本的方法 - http://repeat.tw/blog/post/23079738-svn-
%E5%9B%9E%E5%BE%A9%E5%88%B0%E5%89%8D%E4%B8%80%E7%89%88%E6%9C%AC%E7%9A%84%E6
%96%B9%E6%B3%95
• Git magic - http://www-cs-students.stanford.edu/~blynn/gitmagic/intl/zh_tw/
• ihower Git控制系統 - https://ihower.tw/git/
• ihower - Git flow 開發流程 - https://ihower.tw/blog/archives/5140
• gitflow tool - https://github.com/nvie/gitflow
• gitflow cheatsheet - http://danielkummer.github.io/git-flow-cheatsheet/
• A successful git work flow - http://nvie.com/posts/a-successful-git-branching-model/
• rebase vs merge - https://www.atlassian.com/git/tutorials/merging-vs-rebasing/the-golden-rule-of-rebasing

Mais conteúdo relacionado

Mais procurados

工程師必備第一工具 - Git
工程師必備第一工具 - Git工程師必備第一工具 - Git
工程師必備第一工具 - GitAlan Tsai
 
Git基礎介紹
Git基礎介紹Git基礎介紹
Git基礎介紹Max Ma
 
A successful git branching model 導讀
A successful git branching model 導讀A successful git branching model 導讀
A successful git branching model 導讀Wen Liao
 
Git & Sourcetree 介紹
Git & Sourcetree 介紹Git & Sourcetree 介紹
Git & Sourcetree 介紹Adison wu
 
Mercurial簡介與教學
Mercurial簡介與教學Mercurial簡介與教學
Mercurial簡介與教學芳本 林
 
初心者 Git 上手攻略
初心者 Git 上手攻略初心者 Git 上手攻略
初心者 Git 上手攻略Lucien Lee
 
版本控制 使用Git & git hub
版本控制   使用Git & git hub版本控制   使用Git & git hub
版本控制 使用Git & git hub維佋 唐
 
Git&Github Tutorial
Git&Github TutorialGit&Github Tutorial
Git&Github TutorialTing Wen Su
 
Git and Github basic with SourceTree
Git and Github basic with SourceTreeGit and Github basic with SourceTree
Git and Github basic with SourceTreeChu-Siang Lai
 
Git & git flow
Git & git flowGit & git flow
Git & git flowAmo Wu
 
Git 版本控制系統 -- 從微觀到宏觀
Git 版本控制系統 -- 從微觀到宏觀Git 版本控制系統 -- 從微觀到宏觀
Git 版本控制系統 -- 從微觀到宏觀Wen-Tien Chang
 
Git in a nutshell
Git in a nutshellGit in a nutshell
Git in a nutshellNelson Tai
 
Git and git hub
Git and git hubGit and git hub
Git and git hub唯 李
 
Intro to Git 投影片
Intro to Git 投影片Intro to Git 投影片
Intro to Git 投影片Tony Yeh
 
Introduction to git
Introduction to gitIntroduction to git
Introduction to gitBo-Yi Wu
 
電子內容管理 使用Git 與 github 1
電子內容管理   使用Git 與 github 1電子內容管理   使用Git 與 github 1
電子內容管理 使用Git 與 github 1Alan Tsai
 
Git flow 與團隊合作
Git flow 與團隊合作Git flow 與團隊合作
Git flow 與團隊合作Bo-Yi Wu
 
連哈秋都懂的Git教學
連哈秋都懂的Git教學連哈秋都懂的Git教學
連哈秋都懂的Git教學hydai
 

Mais procurados (20)

工程師必備第一工具 - Git
工程師必備第一工具 - Git工程師必備第一工具 - Git
工程師必備第一工具 - Git
 
Git基礎介紹
Git基礎介紹Git基礎介紹
Git基礎介紹
 
A successful git branching model 導讀
A successful git branching model 導讀A successful git branching model 導讀
A successful git branching model 導讀
 
Git & Sourcetree 介紹
Git & Sourcetree 介紹Git & Sourcetree 介紹
Git & Sourcetree 介紹
 
Mercurial簡介與教學
Mercurial簡介與教學Mercurial簡介與教學
Mercurial簡介與教學
 
初心者 Git 上手攻略
初心者 Git 上手攻略初心者 Git 上手攻略
初心者 Git 上手攻略
 
版本控制 使用Git & git hub
版本控制   使用Git & git hub版本控制   使用Git & git hub
版本控制 使用Git & git hub
 
Git&Github Tutorial
Git&Github TutorialGit&Github Tutorial
Git&Github Tutorial
 
Gitlab
GitlabGitlab
Gitlab
 
Git and Github basic with SourceTree
Git and Github basic with SourceTreeGit and Github basic with SourceTree
Git and Github basic with SourceTree
 
Git Tutorial 教學
Git Tutorial 教學Git Tutorial 教學
Git Tutorial 教學
 
Git & git flow
Git & git flowGit & git flow
Git & git flow
 
Git 版本控制系統 -- 從微觀到宏觀
Git 版本控制系統 -- 從微觀到宏觀Git 版本控制系統 -- 從微觀到宏觀
Git 版本控制系統 -- 從微觀到宏觀
 
Git in a nutshell
Git in a nutshellGit in a nutshell
Git in a nutshell
 
Git and git hub
Git and git hubGit and git hub
Git and git hub
 
Intro to Git 投影片
Intro to Git 投影片Intro to Git 投影片
Intro to Git 投影片
 
Introduction to git
Introduction to gitIntroduction to git
Introduction to git
 
電子內容管理 使用Git 與 github 1
電子內容管理   使用Git 與 github 1電子內容管理   使用Git 與 github 1
電子內容管理 使用Git 與 github 1
 
Git flow 與團隊合作
Git flow 與團隊合作Git flow 與團隊合作
Git flow 與團隊合作
 
連哈秋都懂的Git教學
連哈秋都懂的Git教學連哈秋都懂的Git教學
連哈秋都懂的Git教學
 

Semelhante a 開發用不著打一架 - 分散式版本控制 Git

Git Flow 管理
Git Flow 管理Git Flow 管理
Git Flow 管理Pu Lee
 
Git入门与实践
Git入门与实践Git入门与实践
Git入门与实践LC2009
 
Git 入门实战
Git 入门实战Git 入门实战
Git 入门实战icy leaf
 
Android 程式設計(4)
Android 程式設計(4)Android 程式設計(4)
Android 程式設計(4)Roy Wang
 
COSCUP 2015 開源之道-Git工作坊教學簡報
COSCUP 2015 開源之道-Git工作坊教學簡報COSCUP 2015 開源之道-Git工作坊教學簡報
COSCUP 2015 開源之道-Git工作坊教學簡報Bachue Zhou
 
簡介 GitHub 平台
簡介 GitHub 平台簡介 GitHub 平台
簡介 GitHub 平台Will Huang
 
簡介 Git hub 平台 ( 1.5 hrs )
簡介 Git hub 平台 ( 1.5 hrs )簡介 Git hub 平台 ( 1.5 hrs )
簡介 Git hub 平台 ( 1.5 hrs )Will Huang
 
Github简介及实用入门
Github简介及实用入门Github简介及实用入门
Github简介及实用入门Rongxing Liu
 
Git原理与实战 201607
Git原理与实战 201607Git原理与实战 201607
Git原理与实战 201607Charles Tang
 
Learn git
Learn gitLearn git
Learn git甘 李
 
Learning to Use Git | WeiYuan
Learning to Use Git | WeiYuanLearning to Use Git | WeiYuan
Learning to Use Git | WeiYuanWei-Yuan 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
 
How we migrate TFS to Git ( using Azure DevOps )
How we migrate TFS to Git ( using Azure DevOps )How we migrate TFS to Git ( using Azure DevOps )
How we migrate TFS to Git ( using Azure DevOps )Roberson Liou
 
Git 使用介绍
Git 使用介绍Git 使用介绍
Git 使用介绍medcl
 
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
 
Git流派與工作流程.pptx
Git流派與工作流程.pptxGit流派與工作流程.pptx
Git流派與工作流程.pptx健誠 呂
 

Semelhante a 開發用不著打一架 - 分散式版本控制 Git (20)

Git Flow 管理
Git Flow 管理Git Flow 管理
Git Flow 管理
 
Git入门与实践
Git入门与实践Git入门与实践
Git入门与实践
 
Git 入门实战
Git 入门实战Git 入门实战
Git 入门实战
 
Android 程式設計(4)
Android 程式設計(4)Android 程式設計(4)
Android 程式設計(4)
 
COSCUP 2015 開源之道-Git工作坊教學簡報
COSCUP 2015 開源之道-Git工作坊教學簡報COSCUP 2015 開源之道-Git工作坊教學簡報
COSCUP 2015 開源之道-Git工作坊教學簡報
 
簡介 GitHub 平台
簡介 GitHub 平台簡介 GitHub 平台
簡介 GitHub 平台
 
簡介 Git hub 平台 ( 1.5 hrs )
簡介 Git hub 平台 ( 1.5 hrs )簡介 Git hub 平台 ( 1.5 hrs )
簡介 Git hub 平台 ( 1.5 hrs )
 
Github简介及实用入门
Github简介及实用入门Github简介及实用入门
Github简介及实用入门
 
Git原理与实战 201607
Git原理与实战 201607Git原理与实战 201607
Git原理与实战 201607
 
Github簡介
Github簡介Github簡介
Github簡介
 
Learn git
Learn gitLearn git
Learn git
 
Git
GitGit
Git
 
Learning to Use Git | WeiYuan
Learning to Use Git | WeiYuanLearning to Use Git | WeiYuan
Learning to Use Git | WeiYuan
 
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 教學)
 
How we migrate TFS to Git ( using Azure DevOps )
How we migrate TFS to Git ( using Azure DevOps )How we migrate TFS to Git ( using Azure DevOps )
How we migrate TFS to Git ( using Azure DevOps )
 
Git 使用介绍
Git 使用介绍Git 使用介绍
Git 使用介绍
 
Git for everyone
Git for everyoneGit for everyone
Git for everyone
 
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教學
 
Git流派與工作流程.pptx
Git流派與工作流程.pptxGit流派與工作流程.pptx
Git流派與工作流程.pptx
 

開發用不著打一架 - 分散式版本控制 Git