Diese Präsentation wurde erfolgreich gemeldet.
Die SlideShare-Präsentation wird heruntergeladen. ×

Git版本管理控管實戰

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Wird geladen in …3
×

Hier ansehen

1 von 33 Anzeige
Anzeige

Weitere Verwandte Inhalte

Aktuellste (20)

Anzeige

Git版本管理控管實戰

  1. 1. Claire Chang Git版本控管實戰 課程分享
  2. 2. 為什麼想去上課 ❖ 導入GIT後在mobile2.0開發完成要合併時發⽣嚴重衝突 ❖ 整體開發流程上尚未建⽴⼀致的流程概念 ❖ 因⾃⼰和團隊對GIT不熟悉,導致容易在操作GIT時因操 作錯誤產⽣問題,並且在遇到問題時不知該如何解決 ❖ 現有的GIT線圖混亂⽽難以辨視,讓GIT的優點無法在團 隊內發⽣效果(反⽽比SVN時代更難理解)
  3. 3. 這次分享的⽬標 ❖ 建⽴⼀套操作GIT的標準流程規範(包括統⼀PULL⽅ 式,與Designer的合作模式,分⽀合併策略的統⼀等 等) ❖ 提升團隊成員對GIT的了解度,使團隊減少因操作問題⽽ 發⽣的錯誤 ❖ 讓團隊的GIT分⽀圖能夠更易於理解與辨視
  4. 4. << 終極⽬標
  5. 5. 分散式版本控管 ❖ 分為『⼯作區』及『儲存庫』 ❖ 本地端⼯作區會有⼀份完整的儲存庫 ❖ 沒有.git⽬錄可⽤git init⾃⼰建⼀個 ❖ 砍掉.git等於刪除所有版控資訊 ❖ 擁有.git⽬錄等於可以隨時復原所有歷史原始碼
  6. 6. 儲存庫(Repository) ❖ 本地儲存庫( Local Repository ) ❖ 同時包含⼯作⽬錄與儲存庫 ❖ 預設位於⼯作⽬錄下的.git 資料夾 ❖ 遠端儲存庫( Remote Repository ) ❖ 僅儲存庫(Bare Repository) ❖ GitHub / Bitbucket / Visual Studio Team Services / … ❖ 共⽤儲存庫( Shared Repository ) ❖ 僅儲存庫(Bare Repository) ❖ 使⽤⽅式跟遠端儲存庫⼀樣 ❖ 可以⽤git init--bare建⽴共⽤儲存庫
  7. 7. 了解Git 資料結構 ❖ 物件( Object ) ❖ ⽤來保存儲存庫中所有檔案與版本紀錄( 或稱「物件儲存區」) ❖ 屬於⼀種「不可變的」(immutable) 檔案類型 ❖ 區分四種物件類型 ❖ blob儲存檔案內容 ❖ tree儲存⽬錄內容(儲存⽬錄下有哪些檔名) ❖ commit儲存版本內容 ❖ tag儲存標籤內容 ❖ 索引( Index ) ❖ ⽤來保存要進儲存庫之前的所有檔案狀態 ❖ 屬於⼀種「可變的」(mutable) 檔案類型 ❖ 主要位於.git/index檔案(⼆進位檔) ❖ 介於物件儲存區(object storage) 與⼯作⽬錄(working directory) ❖ 不在索引中的檔案又稱為untracked files
  8. 8. 查看物件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
  9. 9. 問題: 如果有⼀個SHA壓縮後1GB的⽂字檔,今 天修改了裡⾯1byte的內容,commit後git儲 存庫的⼤⼩會增加多少呢︖
  10. 10. 儲存庫、⼯作⽬錄與索引的關係圖
  11. 11. 顯⽰前幾次在GIT操作過的指令 git reflog
  12. 12. 深入了解RESET ❖ 主要⽤途:將當前分⽀復原變更–復原上次認可( Undo last commit ) git reset HEAD~ ❖ 字⾯翻譯:將當前分⽀重置到指定版本–復原至特定版本 git reset 9ac91edf7342c14c3698f27cb4a18ea5727c3d53
  13. 13. 問題:TAG與BRANCH有什麼不 ⼀樣︖
  14. 14. 關於「分⽀」的真正意義 ❖ 三維空間(3D) 外加⼀個時間維度可以稱為四維空間(4D) ❖ 分⽀就是⼀個可以讓你標記時間維度的指標 ❖ 分⽀是⼀個會隨著時間演進的指標 ❖ 標籤則是⼀個不會隨著時間演進的指標 ❖ 分⽀在Git 中就是⼀個⽂字檔案紀載著⽬前版本的位置 ❖ 「切換分⽀」( Checkout ) 等同於「控制時間維度」
  15. 15. 合併(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
  16. 16. 合併「不同世界」的分⽀
  17. 17. 分⽀合併與衝突處理
  18. 18. 其他不同的合併⽅式
  19. 19. 保持「⼯作⽬錄」的乾淨清爽
  20. 20. 認識detached HEAD 狀態
  21. 21. 認識fast-forward Fast forward 合併之前 no Fast forward
  22. 22. 重新認識git pull ❖ 等同於下列命令 ❖ git fetch origin <branch> ❖ git merge FETCH_HEAD
  23. 23. 保哥的強烈建議 ❖ 最好在AD登入時每個⼈都執⾏這個 ❖ git config —global pull.ff only ❖ 預設改⽤rebase進⾏合併 ❖ 不要把主要分⽀合併到次要分⽀,如果次要分⽀需要更 新主要分⽀的內容,⽤rebase的⽅式,這樣線圖的箭頭才 不會來來回回的很亂
  24. 24. 看圖說故事 誰把DEV偷⾛了
  25. 25. 重定基底(Rebase)
  26. 26. Rebase DEMO
  27. 27. 改善建議 ❖ 預設改⽤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的所有之前的⼯作內容 清空)

×