合併和修補
如果你有一個需要合併到 V8 其中一個生產分支的 master
分支修補程式(例如一個重要的錯誤修正),請繼續閱讀。
以下範例使用 V8 的 2.4 分支版本。請用你的版本號碼取代 2.4
。閱讀 V8 發行流程 和 V8 版本編號 文件以取得更多資訊。
如果合併修補程式,則在 Chromium 或 V8 的問題追蹤器上關聯的問題是必要的。這有助於追蹤合併。你可以使用 範本 來建立合併要求問題。
什麼樣的條件才符合合併候選資格? #
- 修補程式修正了一個嚴重的錯誤(依重要性排序)
- 安全性錯誤
- 穩定性錯誤
- 正確性錯誤
- 效能錯誤
- 修補程式不會變更 API。
- 修補程式不會變更分支切換前的行為(除非行為變更修正了一個錯誤)。
可以在 相關的 Chromium 頁面 上找到更多資訊。如有疑問,請寄電子郵件至 v8-dev@googlegroups.com。
合併流程 #
Chromium 和 V8 追蹤器中的合併流程由標籤驅動,標籤格式為
Merge-[Status]-[Branch]
目前 V8 的重要標籤為
Merge-Request-{Branch}
啟動流程,表示這個修正應該合併到{Branch}
中。{Branch}
是 V8 分支的名稱/編號,例如 M72 的7.2
。Merge-Review-{Branch}
表示合併尚未核准{Branch}
,例如因為缺少 Canary 涵蓋範圍。Merge-Approved-{Branch}
表示 Chrome TPM 已核准合併。- 合併完成時,
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 #
請注意,此選項僅在補丁在發行分支上乾淨地套用時才有效。
- 開啟你想要反向合併的 CL。
- 從延伸功能表中選擇「櫻桃挑選」(右上角的三个垂直點)。
- 輸入「refs/branch-heads/X.X」作為目標分支(用適當的分支取代 X.X)。
- 修改提交訊息
- 在標題前面加上「已合併:」。
- 移除與原始 CL 相應的頁尾行(「變更 ID」、「已審閱」、「已審閱者」、「提交佇列」、「Cr-提交位置」)。一定要保留「(從提交 XXX 櫻桃挑選)」行,因為某些工具需要這行來將合併與原始 CL 關聯起來。
- 如果發生合併衝突,請繼續並建立 CL。若要解決衝突(如果有),請使用 gerrit UI 或你可以使用功能表中的「下載補丁」指令(右上角的三个垂直點)輕鬆地將補丁拉到本地。
- 發送審閱。
選項 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.org 和 hablich@chromium.org。
是否有 TL;DR? #
- 在問題追蹤器上建立問題.
- 使用
tools/release/mergeinfo.py
檢查修正狀態 - 將
Merge-Request-{Branch}
加入問題。 - 等到有人加入
Merge-Approved-{Branch}
。 - 合併.