Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.
讓他來告訴你
- 開發用不著打一架 -
分散式版本控制 - 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-Mo...
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)和
Tree...
HOW Git WORKS
參照 Reference
• Reference 會指向一個 Commit
• tag 不會移動,指向的 commit 都一樣
• (帶有額外資訊的 tag 內部會用 Object 儲存)
• 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/arch...
gitflow - 剩下的分三條
支援性分支
▪ Feature branches: 開發新功能都從 develop 分支出來
,完成後 merge 回 develop
▪ Release branches: 準備要 release 的版本,只...
聽起來很麻煩?
• 其實有工具可以用(不過個人覺得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的他
那份修改會被禁止
• 這時候就要...
協作的精神就是討論
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入門指南 - htt...
Prochain SlideShare
Chargement dans…5
×

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

584 vues

Publié le

會不會覺得明明寫code就寫code,還要搞個什麼版本控制有夠煩人
不不不....這樣就不對了,當開始與其他人協作的時候
要是沒有做好協作分工的話這可是會讓程序猿們捲起袖口打一架的火爆事件呢
那為了避免流血衝突
在這邊簡單介紹Git是什麼,跟我們會如何在開發上使用Git協作
讓大家能夠和顏悅色出口成章事事順心跟co-worker一起吃飯不用怕尷尬

Publié dans : Technologie
  • Soyez le premier à commenter

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

  1. 1. 讓他來告訴你 - 開發用不著打一架 - 分散式版本控制 - Git Calvin Huang
  2. 2. WHY Git • 大家都用Git • Github超屌(那你知道Github用Rails做的嗎?該寫 Rails囉) • 所以我一定也要用Git
  3. 3. WHY Git • 強大的Branching能力 • 不用那麼害怕conflict(雖然說這樣,但騷年,你還是 應該要怕conflict) • 月光寶盒
  4. 4. WHAT IS Git • Github(不對!) • 分散式版本控制系統,不用伺服器端軟體就可以運用 版本控制。 • 每個commit都會建立一份檔案的快照(Snapshot) • 無痛分支 • Push到remote前可以做很多壞事
  5. 5. 先從Git上岔開來看一下 有聽過SVN(Subversion)嗎? • 傳統集中式版本控制系統 • 每一個commit都算一次版號增加(如果將每一次小功能完成就 commit一次版號無限增加很可怕) • 如果遇到conflict,Lock-Modify-Unlock或是Copy-Modify-Merge。 • brach merge不會紀錄任何merge的資訊,所以很容易造成一堆 conflict • 其實也有revert,但僅限於尚未commit前,已經送出去的想追回來 還頗麻煩
  6. 6. HOW TO Git • 基本功的add, commit, pull, push, reset, checkout • 重要的branch, merge, rebase, diff…… • 還有很多其他的像是stash, blame……
  7. 7. HOW Git WORKS SVN這樣做 Git全都記
  8. 8. HOW Git WORKS Git 的 Repository 又稱作 Object Database 資料庫,共有四種 Objects 類型: • Blob 記錄檔案內容 • Tree 記錄該目錄下有哪些檔案(檔名、內容的SHA1)和 Trees • Commit 記錄 commit 訊息、Root tree 和 Parent commits 的 SHA1 • Tag 記錄標籤
  9. 9. HOW Git WORKS 參照 Reference • Reference 會指向一個 Commit • tag 不會移動,指向的 commit 都一樣 • (帶有額外資訊的 tag 內部會用 Object 儲存) • branch 指向該 branch 最新的 commit • HEAD 指向 current branch
  10. 10. 先暫時簡單介紹到這邊 其實重點一直著重在兩點上面 • 開branch不用錢 • 可以完美的建立分離的工作環境(啊奇怪在我的環境 下可以跑啊怎麼到你那邊就不行了)
  11. 11. 既然如此,可以怎麼做 • 新功能要寫 - 開branch,有Bug要修 - 開branch,重 構開branch,總之想幹嘛先開branch就對了 branch~~有code要改救救我
  12. 12. 開branch的好處 • 確保工作分配 • 避免互相影響(壞的方面) • 專案開發進度清晰化
  13. 13. 所以,我們就這樣開branch
  14. 14. BUT……!?
  15. 15. branch管理又是一門大哉問 • 所以有人提出了gitflow
  16. 16. gitflow - 主要分兩條 ▪ 主要分支 ▪ master: 永遠處在 production-ready 狀態 ▪ develop: 最新的下次發佈開發狀態 直接copy from - https://ihower.tw/blog/archives/5140
  17. 17. 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
  18. 18. 聽起來很麻煩? • 其實有工具可以用(不過個人覺得release可以等同 master,所以branch還是偏好自己開) https://github.com/nvie/gitflow
  19. 19. 小劇場加碼 - 怎麼整理branch 今天有一個功能要開發 不過把工作內容再細分後分派給不同人員進行開發
  20. 20. 小劇場加碼 - 怎麼整理branch 如果直接merge回去的話似乎有點雜亂 不過線圖一多就總有種好像工作效率超好做很多事情的錯覺?
  21. 21. 小劇場加碼 - 怎麼整理branch 本是同一個大功能Message 所以在Voice Message上rebase到Message
  22. 22. 小劇場加碼 - 怎麼整理branch 再來使用merge fast forward的方式把兩條合併
  23. 23. 小劇場加碼 - 怎麼整理branch
  24. 24. 小時候媽媽有說過 push出去的branch不要rebase知不知道 我知道我知道,但還真不知道為什麼
  25. 25. push出去的branch其實會拒絕你 • 因為當push到remote server,別人pull了那一份,天 曉得你把哪個commit改掉了 • push —force可以強制更動,不過協作者要push的他 那份修改會被禁止 • 這時候就要reset到被你rebase的那一個commit重新 整合
  26. 26. 協作的精神就是討論 pull request強制性的要求雙方共同檢視修改
  27. 27. 協作的精神就是討論 pull request強制性的要求雙方共同檢視修改
  28. 28. 嗯?你說剛剛都是說Github? 不,其實同樣的東西Gitlab上面也有
  29. 29. 結論:Git讓程序猿們相處融洽 誰寫的醜先拖出來斬了就不會有問題
  30. 30. 做後端很常遇到,其實app也會 需要拿測試版給測試人員的時候? • 如果我們在開發後需要打包/重啟環境以便提供最新 版本的程式給不存在的QA或是PM的時候,每一次都 要等個好幾分鐘或是又要輸入指令重開真是有夠麻煩
  31. 31. 同場加映 只有一點點LA
  32. 32. 持續集成工具 - CI • 自動建置 • 自動化測試 • code分析 • 自動部署 • 自動整合資料庫 • 取得系統健康度
  33. 33. 資料參考 • 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

×