SlideShare uma empresa Scribd logo
1 de 33
Baixar para ler offline
Claire Chang
Git版本控管實戰 課程分享
為什麼想去上課
❖ 導入GIT後在mobile2.0開發完成要合併時發⽣嚴重衝突
❖ 整體開發流程上尚未建⽴⼀致的流程概念
❖ 因⾃⼰和團隊對GIT不熟悉,導致容易在操作GIT時因操
作錯誤產⽣問題,並且在遇到問題時不知該如何解決
❖ 現有的GIT線圖混亂⽽難以辨視,讓GIT的優點無法在團
隊內發⽣效果(反⽽比SVN時代更難理解)
這次分享的⽬標
❖ 建⽴⼀套操作GIT的標準流程規範(包括統⼀PULL⽅
式,與Designer的合作模式,分⽀合併策略的統⼀等
等)
❖ 提升團隊成員對GIT的了解度,使團隊減少因操作問題⽽
發⽣的錯誤
❖ 讓團隊的GIT分⽀圖能夠更易於理解與辨視
<< 終極⽬標
分散式版本控管
❖ 分為『⼯作區』及『儲存庫』
❖ 本地端⼯作區會有⼀份完整的儲存庫
❖ 沒有.git⽬錄可⽤git init⾃⼰建⼀個
❖ 砍掉.git等於刪除所有版控資訊
❖ 擁有.git⽬錄等於可以隨時復原所有歷史原始碼
儲存庫(Repository)
❖ 本地儲存庫( Local Repository )
❖ 同時包含⼯作⽬錄與儲存庫
❖ 預設位於⼯作⽬錄下的.git 資料夾
❖ 遠端儲存庫( Remote Repository )
❖ 僅儲存庫(Bare Repository)
❖ GitHub / Bitbucket / Visual Studio Team Services / …
❖ 共⽤儲存庫( Shared Repository )
❖ 僅儲存庫(Bare Repository)
❖ 使⽤⽅式跟遠端儲存庫⼀樣
❖ 可以⽤git init--bare建⽴共⽤儲存庫
了解Git 資料結構
❖ 物件( Object )
❖ ⽤來保存儲存庫中所有檔案與版本紀錄( 或稱「物件儲存區」)
❖ 屬於⼀種「不可變的」(immutable) 檔案類型
❖ 區分四種物件類型
❖ blob儲存檔案內容
❖ tree儲存⽬錄內容(儲存⽬錄下有哪些檔名)
❖ commit儲存版本內容
❖ tag儲存標籤內容
❖ 索引( Index )
❖ ⽤來保存要進儲存庫之前的所有檔案狀態
❖ 屬於⼀種「可變的」(mutable) 檔案類型
❖ 主要位於.git/index檔案(⼆進位檔)
❖ 介於物件儲存區(object storage) 與⼯作⽬錄(working directory)
❖ 不在索引中的檔案又稱為untracked files
查看物件ID / 內容/ 類型/ ⼤⼩
❖ 計算物件編號(object id)
git hash-object filename.ext
❖ 查看物件內容(pretty print)
git cat-file -p a023a56eb2870c106ea9b968ece62604c9d81bb1
❖ 查看物件類型(type)
git cat-file -t a023a56eb2870c106ea9b968ece62604c9d81bb1
❖ 查看物件⼤⼩(size)
git cat-file -s a023a56eb2870c106ea9b968ece62604c9d81bb1
問題:
如果有⼀個SHA壓縮後1GB的⽂字檔,今
天修改了裡⾯1byte的內容,commit後git儲
存庫的⼤⼩會增加多少呢︖
儲存庫、⼯作⽬錄與索引的關係圖
顯⽰前幾次在GIT操作過的指令
git reflog
深入了解RESET
❖ 主要⽤途:將當前分⽀復原變更–復原上次認可( Undo
last commit )
git reset HEAD~
❖ 字⾯翻譯:將當前分⽀重置到指定版本–復原至特定版本
git reset 9ac91edf7342c14c3698f27cb4a18ea5727c3d53
問題:TAG與BRANCH有什麼不
⼀樣︖
關於「分⽀」的真正意義
❖ 三維空間(3D) 外加⼀個時間維度可以稱為四維空間(4D)
❖ 分⽀就是⼀個可以讓你標記時間維度的指標
❖ 分⽀是⼀個會隨著時間演進的指標
❖ 標籤則是⼀個不會隨著時間演進的指標
❖ 分⽀在Git 中就是⼀個⽂字檔案紀載著⽬前版本的位置
❖ 「切換分⽀」( Checkout ) 等同於「控制時間維度」
合併(Merging)
❖ ⼀般合併
❖ git merge
❖ git merge —no-ff
❖ git merge —squash
❖ git merge —no-commit
❖ git merge —abort
❖ 正向挑選合併(撿櫻桃)
❖ git cherry-pick
❖ git cherry-pick —continue
❖ git cherry-pick —quit
❖ git cherry-pick —abort
❖ 重新指定基礎位置合併
❖ git rebase
❖ git rebase -i
❖ git rebase —continue
❖ git rebase —skip
❖ git rebase —abort
❖ 反向挑選合併
❖ git revert
❖ git revert —continue
❖ git revert —quit
❖ git revert --abort
合併「不同世界」的分⽀
分⽀合併與衝突處理
其他不同的合併⽅式
保持「⼯作⽬錄」的乾淨清爽
認識detached HEAD 狀態
認識fast-forward
Fast forward
合併之前
no Fast forward
重新認識git pull
❖ 等同於下列命令
❖ git fetch origin <branch>
❖ git merge FETCH_HEAD
保哥的強烈建議
❖ 最好在AD登入時每個⼈都執⾏這個
❖ git config —global pull.ff only
❖ 預設改⽤rebase進⾏合併
❖ 不要把主要分⽀合併到次要分⽀,如果次要分⽀需要更
新主要分⽀的內容,⽤rebase的⽅式,這樣線圖的箭頭才
不會來來回回的很亂
看圖說故事 誰把DEV偷⾛了
重定基底(Rebase)
Rebase DEMO
改善建議
❖ 預設改⽤rebase進⾏合併
git config —global pull.ff only
❖ Branch需要更新dev資料時,使⽤rebase取代merge
❖ dev要合併到qat時,加下—no-ff參數
❖ Designer不實際參與GIT操作
❖ 每個⼈⾃⼰⼀個branch(這邊叫Sena branch好了)
❖ 送交:寫好bat檔,點兩下輸入訊息後⾃動做commit和push。
❖ 取得檔案:要切換到不同的QAT單⼯作時,設計⼀個bat檔,點兩
下後輸入單號,該bat檔會⾃動reset Sena branch,然後rebase到
該單號的HEAD。(將本地端未COMMIT的所有之前的⼯作內容
清空)

Mais conteúdo relacionado

Semelhante a Git版本管理控管實戰

以 PM 角度來看轉型 Agile 的歷程,與那些踩過的坑
以 PM 角度來看轉型 Agile 的歷程,與那些踩過的坑以 PM 角度來看轉型 Agile 的歷程,與那些踩過的坑
以 PM 角度來看轉型 Agile 的歷程,與那些踩過的坑Chang Shih-Chieh
 
Project GATE 的敏捷實踐之路
Project GATE 的敏捷實踐之路Project GATE 的敏捷實踐之路
Project GATE 的敏捷實踐之路AgileCommunity
 
Git flow 與團隊合作
Git flow 與團隊合作Git flow 與團隊合作
Git flow 與團隊合作Bo-Yi Wu
 
工程師必備第一工具 - Git
工程師必備第一工具 - Git工程師必備第一工具 - Git
工程師必備第一工具 - GitAlan Tsai
 
Scrum gathering 2012 shanghai 产品管理及用户体验 分会场:敏捷的hard模式 产品经理视角(窦涵之)
Scrum gathering 2012 shanghai 产品管理及用户体验 分会场:敏捷的hard模式 产品经理视角(窦涵之)Scrum gathering 2012 shanghai 产品管理及用户体验 分会场:敏捷的hard模式 产品经理视角(窦涵之)
Scrum gathering 2012 shanghai 产品管理及用户体验 分会场:敏捷的hard模式 产品经理视角(窦涵之)LetAgileFly
 
2020DDDTW-如何逐步導入敏捷精神,創造願意接受失敗的開發團隊?
2020DDDTW-如何逐步導入敏捷精神,創造願意接受失敗的開發團隊?2020DDDTW-如何逐步導入敏捷精神,創造願意接受失敗的開發團隊?
2020DDDTW-如何逐步導入敏捷精神,創造願意接受失敗的開發團隊?棋文 鄭
 
Intro to Git 投影片
Intro to Git 投影片Intro to Git 投影片
Intro to Git 投影片Tony Yeh
 
Jira live demo_2020_v20
Jira live demo_2020_v20Jira live demo_2020_v20
Jira live demo_2020_v20Linktech
 
Git流派與工作流程.pptx
Git流派與工作流程.pptxGit流派與工作流程.pptx
Git流派與工作流程.pptx健誠 呂
 
[2019 臺灣雲端大會]使用雲端技術打造快速的 AI 服務上線
[2019 臺灣雲端大會]使用雲端技術打造快速的 AI 服務上線[2019 臺灣雲端大會]使用雲端技術打造快速的 AI 服務上線
[2019 臺灣雲端大會]使用雲端技術打造快速的 AI 服務上線Yi-Wei Lai
 
Git & git flow
Git & git flowGit & git flow
Git & git flowAmo Wu
 
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
 
過來人經驗 - 在企業中推行 DevOps 前該具備的認知與工具箱
過來人經驗 - 在企業中推行 DevOps 前該具備的認知與工具箱過來人經驗 - 在企業中推行 DevOps 前該具備的認知與工具箱
過來人經驗 - 在企業中推行 DevOps 前該具備的認知與工具箱TIM WANG
 
敏捷開發分享
敏捷開發分享敏捷開發分享
敏捷開發分享東城 楊
 
Git flow
Git flowGit flow
Git flowshaokun
 
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
 
資訊架構-Blueprints For The Web Ch1
資訊架構-Blueprints For The Web Ch1資訊架構-Blueprints For The Web Ch1
資訊架構-Blueprints For The Web Ch1William Lin
 

Semelhante a Git版本管理控管實戰 (20)

以 PM 角度來看轉型 Agile 的歷程,與那些踩過的坑
以 PM 角度來看轉型 Agile 的歷程,與那些踩過的坑以 PM 角度來看轉型 Agile 的歷程,與那些踩過的坑
以 PM 角度來看轉型 Agile 的歷程,與那些踩過的坑
 
Project GATE 的敏捷實踐之路
Project GATE 的敏捷實踐之路Project GATE 的敏捷實踐之路
Project GATE 的敏捷實踐之路
 
Git flow 與團隊合作
Git flow 與團隊合作Git flow 與團隊合作
Git flow 與團隊合作
 
工程師必備第一工具 - Git
工程師必備第一工具 - Git工程師必備第一工具 - Git
工程師必備第一工具 - Git
 
Git for everyone
Git for everyoneGit for everyone
Git for everyone
 
Git 經驗分享
Git 經驗分享Git 經驗分享
Git 經驗分享
 
Scrum gathering 2012 shanghai 产品管理及用户体验 分会场:敏捷的hard模式 产品经理视角(窦涵之)
Scrum gathering 2012 shanghai 产品管理及用户体验 分会场:敏捷的hard模式 产品经理视角(窦涵之)Scrum gathering 2012 shanghai 产品管理及用户体验 分会场:敏捷的hard模式 产品经理视角(窦涵之)
Scrum gathering 2012 shanghai 产品管理及用户体验 分会场:敏捷的hard模式 产品经理视角(窦涵之)
 
2020DDDTW-如何逐步導入敏捷精神,創造願意接受失敗的開發團隊?
2020DDDTW-如何逐步導入敏捷精神,創造願意接受失敗的開發團隊?2020DDDTW-如何逐步導入敏捷精神,創造願意接受失敗的開發團隊?
2020DDDTW-如何逐步導入敏捷精神,創造願意接受失敗的開發團隊?
 
Intro to Git 投影片
Intro to Git 投影片Intro to Git 投影片
Intro to Git 投影片
 
Git
GitGit
Git
 
Jira live demo_2020_v20
Jira live demo_2020_v20Jira live demo_2020_v20
Jira live demo_2020_v20
 
Git流派與工作流程.pptx
Git流派與工作流程.pptxGit流派與工作流程.pptx
Git流派與工作流程.pptx
 
[2019 臺灣雲端大會]使用雲端技術打造快速的 AI 服務上線
[2019 臺灣雲端大會]使用雲端技術打造快速的 AI 服務上線[2019 臺灣雲端大會]使用雲端技術打造快速的 AI 服務上線
[2019 臺灣雲端大會]使用雲端技術打造快速的 AI 服務上線
 
Git & git flow
Git & git flowGit & git flow
Git & git flow
 
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 教學)
 
過來人經驗 - 在企業中推行 DevOps 前該具備的認知與工具箱
過來人經驗 - 在企業中推行 DevOps 前該具備的認知與工具箱過來人經驗 - 在企業中推行 DevOps 前該具備的認知與工具箱
過來人經驗 - 在企業中推行 DevOps 前該具備的認知與工具箱
 
敏捷開發分享
敏捷開發分享敏捷開發分享
敏捷開發分享
 
Git flow
Git flowGit flow
Git flow
 
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 )
 
資訊架構-Blueprints For The Web Ch1
資訊架構-Blueprints For The Web Ch1資訊架構-Blueprints For The Web Ch1
資訊架構-Blueprints For The Web Ch1
 

Mais de Claire Chang

我們要做什麼」20230707
我們要做什麼」20230707我們要做什麼」20230707
我們要做什麼」20230707Claire Chang
 
Pixi.js網頁遊戲開發實戰
Pixi.js網頁遊戲開發實戰Pixi.js網頁遊戲開發實戰
Pixi.js網頁遊戲開發實戰Claire Chang
 
薩提爾的對話練習
薩提爾的對話練習薩提爾的對話練習
薩提爾的對話練習Claire Chang
 
從零架設直播伺服器
從零架設直播伺服器從零架設直播伺服器
從零架設直播伺服器Claire Chang
 
Learn to code 2 - Beyond the Basics
Learn to code 2 - Beyond the BasicsLearn to code 2 - Beyond the Basics
Learn to code 2 - Beyond the BasicsClaire Chang
 
Auto layout in i os 7
Auto layout in i os 7Auto layout in i os 7
Auto layout in i os 7Claire Chang
 

Mais de Claire Chang (9)

我們要做什麼」20230707
我們要做什麼」20230707我們要做什麼」20230707
我們要做什麼」20230707
 
Pixi.js網頁遊戲開發實戰
Pixi.js網頁遊戲開發實戰Pixi.js網頁遊戲開發實戰
Pixi.js網頁遊戲開發實戰
 
ansible
ansibleansible
ansible
 
薩提爾的對話練習
薩提爾的對話練習薩提爾的對話練習
薩提爾的對話練習
 
從零架設直播伺服器
從零架設直播伺服器從零架設直播伺服器
從零架設直播伺服器
 
Learn to code 2 - Beyond the Basics
Learn to code 2 - Beyond the BasicsLearn to code 2 - Beyond the Basics
Learn to code 2 - Beyond the Basics
 
Ane
AneAne
Ane
 
Starling
StarlingStarling
Starling
 
Auto layout in i os 7
Auto layout in i os 7Auto layout in i os 7
Auto layout in i os 7
 

Git版本管理控管實戰