審查、批准與保護 — MR Collaboration
把 MR 變成「有審查、有批准、有門檻」的合併流程,是 GitLab 的強項—— 尤其 Merge Request Approvals 是它比 GitHub 更早內建、也更有彈性的功能。
┌──────────────────────────────────────┐ │ !12 修正登入頁 Open · 3 commits │ ├──────────────────────────────────────┤ │ Overview Commits Changes Pipelines │ │ └─ 描述(Closes #12) │ │ └─ Reviewers / Assignees │ │ └─ CI 狀態:✔ Pipeline passed │ │ └─ Approval:✔ Approved by 2 人 │ │ └─ [Merge](條件滿足才亮) │ └──────────────────────────────────────┘
「Changes」分頁逐行檢視;GitLab 的 review 流程:
Approvals 規定「要幾個特定角色批准才能合併」——GitLab 最早內建此功能,且規則很細。
專案 → Settings → Merge requests → Approval rules ├── 需要 2 個批准才能合併 ├── 特定檔案(如 src/payments/)必須資深者批准 └── 批准人不能是自己(code owner 例外)
與 GitHub 概念相同:防止直接 push 主分支、強制 MR 流程。
專案 → Settings → Repository → Protected branches ├── 主分支(main) ├── Allowed to merge:只有維護者 └── 結合 CI + Approvals 才能合併
| 方式 | 效果 |
|---|---|
| Merge commit | 保留全部 commit + 合併事件 |
| Squash commits | 壓成一個 commit(對應 GitHub 的 squash) |
| Rebase merge | 線性重放,無合併事件 |
另外 GitLab 有「Merge train」:排隊依序合併,避免互相踩線(企業功能)。