狠狠撸

狠狠撸Share a Scribd company logo
Claire Chang
Git版本控管實戰 課程分享
為什麼想去上課
? 導入GIT後在mobile2.0開發完成要合併時發?嚴重衝突
? 整體開發流程上尚未建??致的流程概念
? 因??和團隊對GIT不熟悉,導致容易在操作GIT時因操
作錯誤產?問題,並且在遇到問題時不知該如何解決
? 現有的GIT線圖混亂?難以辨視,讓GIT的優點無法在團
隊內發?效果(反?比SVN時代更難理解)
這次分享的?標
? 建??套操作GIT的標準流程規範(包括統?PULL?
式,與Designer的合作模式,分?合併策略的統?等
等)
? 提升團隊成員對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 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的所有之前的?作內容
清空)

More Related Content

骋颈迟版本管理控管实战