Git進階系列 | 3. 基於Pull Request實現更好的協作

語言: CN / TW / HK

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能夠提供一致的使用者介面,讓這一切都變得更容易。

儘管如此,一般的工作流程都差不多,包括以下步驟:

  1. 如果你沒有對程式碼庫的寫許可權,第一步是建立一個fork,也就是個人版本的程式碼庫。
  2. 在fork的程式碼庫中建立新的本地分支。(提示: pull request是基於分支的,而不是提交!)
  3. 在本地分支中進行變更並提交。
  4. 將變更推送到自己的遠端程式碼庫。
  5. 建立一個包含相關變更的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