合併和修補

如果你有一個需要合併到 V8 其中一個生產分支的 master 分支修補程式(例如一個重要的錯誤修正),請繼續閱讀。

以下範例使用 V8 的 2.4 分支版本。請用你的版本號碼取代 2.4。閱讀 V8 發行流程V8 版本編號 文件以取得更多資訊。

如果合併修補程式,則在 Chromium 或 V8 的問題追蹤器上關聯的問題是必要的。這有助於追蹤合併。你可以使用 範本 來建立合併要求問題。

什麼樣的條件才符合合併候選資格? #

可以在 相關的 Chromium 頁面 上找到更多資訊。如有疑問,請寄電子郵件至 v8-dev@googlegroups.com

合併流程 #

Chromium 和 V8 追蹤器中的合併流程由標籤驅動,標籤格式為

Merge-[Status]-[Branch]

目前 V8 的重要標籤為

  1. Merge-Request-{Branch} 啟動流程,表示這個修正應該合併到 {Branch} 中。{Branch} 是 V8 分支的名稱/編號,例如 M72 的 7.2
  2. Merge-Review-{Branch} 表示合併尚未核准 {Branch},例如因為缺少 Canary 涵蓋範圍。
  3. Merge-Approved-{Branch} 表示 Chrome TPM 已核准合併。
  4. 合併完成時,Merge-Approved-{Branch} 標籤會被 Merge-Merged-{Branch} 取代。

如何檢查提交是否已合併/還原/有 Canary 涵蓋範圍 #

使用 mergeinfo.py 取得所有根據 Git 連接到 $COMMIT_HASH 的提交。

tools/release/mergeinfo.py $COMMIT_HASH

如果它告訴你 在 Canary 上:沒有 Canary 涵蓋範圍,你不應該合併,因為修正尚未部署在 Canary 建置上。一個好的經驗法則是在修正完成後至少等待 3 天,直到進行合併。

如何建立合併 CL #

選項 1:使用 gerrit #

請注意,此選項僅在補丁在發行分支上乾淨地套用時才有效。

  1. 開啟你想要反向合併的 CL。
  2. 從延伸功能表中選擇「櫻桃挑選」(右上角的三个垂直點)。
  3. 輸入「refs/branch-heads/X.X」作為目標分支(用適當的分支取代 X.X)。
  4. 修改提交訊息
    1. 在標題前面加上「已合併:」。
    2. 移除與原始 CL 相應的頁尾行(「變更 ID」、「已審閱」、「已審閱者」、「提交佇列」、「Cr-提交位置」)。一定要保留「(從提交 XXX 櫻桃挑選)」行,因為某些工具需要這行來將合併與原始 CL 關聯起來。
  5. 如果發生合併衝突,請繼續並建立 CL。若要解決衝突(如果有),請使用 gerrit UI 或你可以使用功能表中的「下載補丁」指令(右上角的三个垂直點)輕鬆地將補丁拉到本地。
  6. 發送審閱。

選項 2:使用自動化腳本 #

假設你正在將版本 af3cf11 合併到分支 2.4(請指定完整的 git hash - 這裡為了簡潔而使用縮寫)。

tools/release/merge_to_branch.py --branch 2.4 af3cf11

使用 -h 執行腳本以顯示其說明訊息,其中包含更多選項(例如,你可以指定包含補丁的文件,或者你可以反轉補丁,指定自訂提交訊息,或繼續你之前取消的合併程序)。請注意,腳本將使用 V8 的暫時簽出 - 它不會觸及你的工作空間。你也可以一次合併多個版本;只要全部列出來即可。

tools/release/merge_to_branch.py --branch 2.4 af3cf11 cf33f1b sf3cf09

著陸後:觀察 分支瀑布 #

如果在處理補丁後,其中一個建置器不是綠色,請立即還原合併。一個機器人(AutoTagBot)會在等待 10 分鐘後處理正確的版本控制。

修補在 Canary/Dev 上使用的版本 #

如果你需要修補 Canary/Dev 版本(不常發生),請遵循以下說明。Google 員工:在建立 CL 之前,請查看 內部網站

步驟 1:合併到 roll 分支 #

使用的範例版本為 5.7.433

tools/release/roll_merge.py --branch 5.7.433 af3cf11

步驟 2:讓 Chromium 了解此修正 #

使用的範例 Chromium 分支為 2978

git checkout chromium/2978
git merge 5.7.433.1
git push

步驟 3:結束 #

Chrome/Chromium 應該會在自動建置時選取變更。

常見問題 #

當兩個人同時合併時,合併腳本中可能會發生競爭條件。如果是這種情況,請聯絡 machenbach@chromium.orghablich@chromium.org

是否有 TL;DR? #

  1. 在問題追蹤器上建立問題.
  2. 使用 tools/release/mergeinfo.py 檢查修正狀態
  3. Merge-Request-{Branch} 加入問題。
  4. 等到有人加入 Merge-Approved-{Branch}
  5. 合併.