Go Wiki: GerritBot

GerritBot 是一個用於將 GitHub Pull Requests (PR) 匯入 Gerrit 進行程式碼審查的工具。它的建立是因為 Go 團隊的所有審查都在 Gerrit 中進行,但我們希望允許透過 GitHub PR 貢獻程式碼的更常見工作流程。

目錄

工作流程

  • 使用者可以像向任何其他接受 PR 的 GitHub 專案一樣,將 GitHub PR 上傳到我們任何一個 GitHub 倉庫。
  • GerritBot 將匯入 PR 的更改,並在 GitHub PR 中釋出一條訊息,其中包含 Gerrit 審查的連結。
  • 所有評論都在 Gerrit 中處理。GitHub PR 上的任何評論都將被忽略。
  • PR 作者可以繼續向 PR 使用的分支上傳 commit,以解決 Gerrit 的反饋。
  • 對 commit 訊息的任何更改都必須透過編輯 GitHub PR 的標題和描述來完成,而不是透過 Gerrit 或 git。(詳情請參閱下面的 FAQ)。
  • 草稿 PR 將被匯入為 WIP
  • 一旦程式碼準備好合併,維護者將在 Gerrit 中提交更改,GerritBot 將關閉該 issue。
  • 同樣,如果 Gerrit 中的某個更改被關閉或放棄,相應的 PR 也將被關閉。

常見問題

我需要一個 Google 賬戶才能註冊 Gerrit 嗎?為什麼我不能使用我的 GitHub 賬戶登入?

您需要一個 Gmail 或其他 Google 賬戶才能 註冊 Gerrit。這是執行我們 Gerrit 例項的基礎設施的一個限制,超出我們的控制範圍。此外,您已經需要一個 Google 賬戶來 簽署我們的 CLA,這是我們接受您貢獻的先決條件。

我在 Gerrit 的評論中留下了回覆,但只有我能看到

Gerrit 中程式碼評論的回覆首先會儲存為草稿,需要透過“Reply”(回覆)按鈕釋出。這是為了防止每次審查“會話”傳送多封電子郵件,並且類似於 GitHub 中的 待定審查工作流程。如果您在“Reply”按鈕文字旁邊看到一個數字,則表示您有待發布的草稿。

如果您在 Gerrit 網頁介面的頂部附近看不到一個大的藍色“Reply”按鈕,請確保您已 登入 Gerrit,這需要 Gmail 或其他 Google 賬戶。

GerritBot 如何確定最終的 commit 訊息?

需要記住的關鍵點

  • GitHub PR 的標題和 PR 描述(第一個 PR 評論)會定期以純文字形式匯入 Gerrit,作為 Gerrit 的 commit 訊息。
  • 因此,要更新 Gerrit 的 commit 訊息,您必須使用 GitHub 網頁介面 編輯 PR 的標題和 PR 描述
  • 無法僅透過推送另一個帶有更新 commit 訊息的 commit 來更新 Gerrit commit 訊息。(推送另一個 commit 不會自動更新 GitHub PR 的標題或 PR 描述,因此更新後的文字不會匯入 Gerrit)。

透過 GitHub PR 更新 Gerrit commit 訊息

Screenshot of the GitHub PR web interface highlighting
the “Edit” button in top-right (for editing the Gerrit commit message title) and
the “Edit” menu option on the first comment (for editing the Gerrit commit message
body).

更詳細地說,GerritBot 使用 GitHub PR 的最新 PR 標題和 PR 描述來構建 Gerrit 更改的 commit 訊息。這些文字可以透過 GitHub 網頁介面(而不是 Gerrit 或 git)進行編輯。

  • PR 標題可以透過 PR 頁面右上角的“Edit”(編輯)按鈕進行編輯。這用於 Gerrit commit 訊息的第一行。
  • PR 描述位於 GitHub PR 的“Conversation”(對話)標籤下的第一個文字區域。可以透過“...”選單上的“Edit”(編輯)選項進行編輯。此文字用於 Gerrit commit 訊息體的其餘部分。

在 GitHub 中編輯 PR 後,Gerrit 更改的更新可能需要 10 分鐘左右。

注意:Gerrit 匯入的是您在 GitHub 中編輯訊息時可見的純文字,並且不匯入您在編輯之前在 GitHub 中看到的渲染文字

一個常見的相關困惑點是關於問題引用。例如,GerritBot 或人工審查者可能會要求您 避免使用問題引用的 URL。在 Gerrit 中,您可能會看到問題的完整 URL,但在 GitHub 網頁介面中,您可能只看到像 #12345 這樣的問題引用,並且可能不清楚 URL 來自何處。這可能是由於 GitHub 的渲染檢視與底層原始/純文字之間的混淆所致。如果 GitHub 網頁介面在您編輯 GitHub 中的文字時顯示類似 Fixes https://github.com/golang/go/issues/12345 的內容,請將其更改為類似 Fixes #12345Fixes golang/go#12345。有關問題引用的更多資訊,請參閱貢獻指南

什麼是 CL?什麼是 Gerrit 更改?

CL 是“change list”(更改列表)的縮寫,本質上是建議引入到倉庫中的一個補丁。Go 專案使用 Gerrit 來仔細審查每個 CL。一個 CL 的例子是 https://golang.org.tw/cl/508475

Gerrit change 是 CL 的另一個術語。

我可以幫助審查他人的 CL 嗎?

是的,強烈鼓勵這樣做,這也是熟悉 Gerrit、Go 專案的 程式碼審查流程 以及 Go 標準庫、執行時、編譯器等內部知識的好方法。

您可以在 這裡 瀏覽當前開啟的 CL,並透過點選星標圖示訂閱感興趣的 CL 的更新。

您不必成為程式碼專家也能幫助進行初步審查分揀。有關更多詳細資訊,請參閱 Gardening wiki 頁面的 幫助審查 CL 部分。

我聽說 Gerrit 要求每次更改有一個 commit。我可以將多個 commit 上傳到我的 PR 嗎?

您可以上傳任意數量的 commit。GerritBot 將負責將您的 commit 合併為一個 Gerrit 可以處理的更改。

為什麼 GerritBot 是我更改的所有者?

這是由於 Gerrit 處理作為另一個使用者執行操作的方式存在一個未解決的 Bug。一旦修復,原始作者也將是該更改的所有者。

我能讓 GerritBot 停止在我的 PR 上釋出評論嗎?

您可以使用 comments 斜槓命令來切換 GerritBot 的評論(例如,/comments off)。

反饋和 Bug 報告

提交一個 issue 並在標題中使用 x/build/cmd/gerritbot: 字首。

我想新增一個功能/修復一個 Bug


此內容是 Go Wiki 的一部分。