Git進階系列 | 3. 基於Pull Request實現更好的協作
Git是最流行的程式碼版本控制系統,這一系列文章介紹了一些Git的高階使用方式,從而幫助我們可以更好的利用Git的能力。本系列一共8篇文章,這是第3篇。原文:Better Collaboration With Pull Requests[1]
本文是“Git進階系列”的第三篇,將介紹pull request這一對大型和小型開發團隊都很有幫助的超棒特性。Pull request不僅改進了評審和反饋過程,還有助於跟蹤和討論程式碼變更。最後重要的一點是,pull request是向其他沒有寫訪問許可權的程式碼庫貢獻內容的理想方式。
Git進階系列: 1. 建立完美的提交 2. Git中的分支策略 3. 基於Pull Request實現更好的協作(本文) 4. 合併衝突 5. Rebase vs Merge 6. 互動式Rebase 7. Git中的Cherry-pick提交 8. 用Reflog恢復丟失的提交
什麼是Pull Request?
首先需要知道,pull request不是Git核心特性。相反,是由使用的Git託管平臺提供的,GitHub、GitLab、Bitbucket、AzureDevops以及其他平臺都提供類似的內建功能。
為什麼需要建立pull request?
在我們討論如何建立完美的pull request的細節之前,先來討論一下為什麼需要這個特性。
假設我們剛剛完成軟體的一個新特性,也許之前一直在特性分支中工作,因此下一步將是將其合併到主線分支(master
分支或main
分支)。在某些情況下,比方說你是專案中唯一的開發人員,或者有足夠的經驗並確定團隊成員不會提出異議,那麼直接合並一點問題都沒有。
不過如果程式碼變更稍微複雜一點,並且希望其他人能夠檢查這部分工作,該怎麼辦呢?這就是pull request的目的。有了pull request,可以邀請其他人來評論所作的工作並給出反饋。
一旦建立了pull request,就可以和其他開發人員討論相關程式碼。大多數Git託管平臺允許其他使用者在此過程中新增評論以及提出建議,當評審人員批准後,就可以將其合併到另一個分支中。
評審工作流並不是建立pull request的唯一原因。如果想對其他沒有寫訪問許可權的程式碼庫做出貢獻,用pull request就會很方便。想想所有的開源專案,如果你有一個新特性的想法,或者如果想提交一個補丁,pull request是一個很好的方式來展示想法,而不必加入這個專案併成為主要貢獻者。
這就引出了一個與pull request緊密相關的話題: fork。
用fork工作
fork是現有Git程式碼庫的個人副本。回到之前關於開源的示例,第一步是建立原始程式碼庫的副本(fork),之後就可以在自己的個人副本中更改程式碼。
一旦完成,就可以建立一個pull request,要求原始程式碼庫的維護者採用你的更改。維護者或其他主要貢獻者可以檢查相關程式碼,然後決定是否採用。
重要提示: Pull request總是基於分支,而不是單個提交!建立pull request時,需要基於一個特定的分支並請求採用。
讓審閱者的生活更輕鬆: 如何建立一個優秀的pull request
如前所述,pull request並不是Git的核心特性。相反,每個Git平臺都有自己的設計以及關於pull request如何工作的想法。這些設計在GitLab, GitHub, Bitbucket等平臺上看起來都不太一樣,每個平臺都有略微不同的工作流,用於跟蹤、討論和審查更改。
無論使用什麼程式碼託管服務,Tower Git客戶端這樣的桌面GUI能夠提供一致的使用者介面,讓這一切都變得更容易。
儘管如此,一般的工作流程都差不多,包括以下步驟:
- 如果你沒有對程式碼庫的寫許可權,第一步是建立一個fork,也就是個人版本的程式碼庫。
- 在fork的程式碼庫中建立新的本地分支。(提示: pull request是基於分支的,而不是提交!)
- 在本地分支中進行變更並提交。
- 將變更推送到自己的遠端程式碼庫。
- 建立一個包含相關變更的pull request,開始與他人討論。
我們看看pull request本身,以及如何建立讓其他開發人員的生活更輕鬆的請求。首先應該簡短,以便快速審閱,當面對3000行程式碼而不是30行程式碼時,就很難理解程式碼了。
其次,確保新增良好的、不言自明的標題和有意義的描述。試著描述做了哪些更改,為什麼建立pull request,以及這些更改對專案的影響。大多數平臺都允許新增螢幕截圖來幫助展示這些變化。
批准、合併還是拒絕?
一旦變更被批准,你(或具有寫訪問權的人)就可以將分支合併到主分支中。但是,如果審閱者不想在當前狀態下合併pull request,該怎麼辦?嗯,你可以等會兒,也可以將新的提交推送到那個分支上,這樣現有的pull request也會更新。
此外,維護者或其他具有寫訪問許可權的人可以在不想合併更改時拒絕pull request。
開發人員的安全網
如你所見,pull request是與其他開發人員溝通協作的好方法。通過讓其他人檢查所作的工作,可以確保只有高質量的程式碼進入程式碼庫。
如果想更深入瞭解高階Git工具,可以免費檢視“Advanced Git Kit[3]”: 這是關於分支策略、互動式Rebase、Reflog、子模組等主題的短影片集合。
References: \ [1] Better Collaboration With Pull Requests: https://css-tricks.com/better-collaboration-with-pull-requests/
你好,我是俞凡,在Motorola做過研發,現在在Mavenir做技術工作,對通訊、網路、後端架構、雲原生、DevOps、CICD、區塊鏈、AI等技術始終保持著濃厚的興趣,平時喜歡閱讀、思考,相信持續學習、終身成長,歡迎一起交流學習。 \ 微信公眾號:DeepNoMind
- Ikigai: 享受生命的意義
- 5分鐘搞懂BFF
- 無程式碼的未來
- Rush vs C 深度比較
- 10分鐘開發Kubernetes Operator
- SDN系統方法 | 3. 基本架構
- 從 IaC 到 IaD
- C 最佳實踐 | 2. 程式碼風格
- Git進階系列 | 5. Rebase vs Merge
- Git 進階系列 | 4. 合併衝突
- Git進階系列 | 6. 互動式Rebase
- Git進階系列 | 3. 基於Pull Request實現更好的協作
- Git進階系列 | 1. 建立完美的提交
- GitOps指南
- 軟體架構的23個基本原則
- 面向快速反應的工程團隊--QRF團隊模型
- 自動化的藝術
- GitOps的12個痛點
- 微服務分散式事務處理
- 架構師成長路線圖