SlideShare a Scribd company logo
讓他來告訴你
- 開發用不著打一架 -
分散式版本控制 - 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

More Related Content

PDF
寫給大家的 Git 教學
PDF
Xcode 的 git 版本管理
PDF
Git與source tree 基礎教學
PDF
Git 版本控制 (使用教學)
PDF
git, repo, Gerrit 基礎教學
PPTX
Visual Studio 2015 與 Git 開發實戰
PPTX
git merge 與 rebase 的觀念與實務應用
PPTX
Git 入門與實作
寫給大家的 Git 教學
Xcode 的 git 版本管理
Git與source tree 基礎教學
Git 版本控制 (使用教學)
git, repo, Gerrit 基礎教學
Visual Studio 2015 與 Git 開發實戰
git merge 與 rebase 的觀念與實務應用
Git 入門與實作

What's hot (20)

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

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

PPTX
Git & git hub v1.2
PDF
Git Tutorial
PPTX
Git introduction
PDF
Git簡介
PDF
Git 簡介(古時候的簡報備份)
PPTX
簡介 Git hub 平台 ( 1.5 hrs )
PPTX
Introduction to Version Control System for Windows
ODP
Git 教學
PDF
Learning to Use Git | WeiYuan
PPTX
大家應該都要會的工具 Git 從放棄到會用1-基礎篇
PDF
如何與 Git 優雅地在樹上唱歌
PDF
Git 入门实战
PDF
Git tutorial for windows user (給 Windows user 的 Git 教學)
PPTX
Github簡介
PDF
COSCUP 2015 開源之道-Git工作坊教學簡報
ODP
Git basis - usage
PPTX
大家應該都要會的工具 Git 從放棄到會用2-分支篇
PPTX
Git 使用介绍
PPTX
Git入門介紹
PPTX
簡介 GitHub 平台
Git & git hub v1.2
Git Tutorial
Git introduction
Git簡介
Git 簡介(古時候的簡報備份)
簡介 Git hub 平台 ( 1.5 hrs )
Introduction to Version Control System for Windows
Git 教學
Learning to Use Git | WeiYuan
大家應該都要會的工具 Git 從放棄到會用1-基礎篇
如何與 Git 優雅地在樹上唱歌
Git 入门实战
Git tutorial for windows user (給 Windows user 的 Git 教學)
Github簡介
COSCUP 2015 開源之道-Git工作坊教學簡報
Git basis - usage
大家應該都要會的工具 Git 從放棄到會用2-分支篇
Git 使用介绍
Git入門介紹
簡介 GitHub 平台
Ad

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