---
# System prepended metadata

title: GitLab 專案配置規範：Git 合併與 Nx Monorepo 最佳實踐
tags: [git, monorepo, gitlab]

---

# GitLab 專案配置規範：Git 合併與 Nx Monorepo 最佳實踐

為了極大化 `nx affected` 的編譯效能並維持高品質的代碼基準，本專案強制執行**線性歷史 (Linear History)**。這能確保每一次併入主幹 (`main`) 的代碼都經過最新環境的驗證，並讓自動化部署更為精確。

---

## 1. 合併請求配置 (Merge Requests Settings)
**路徑：** `Settings > Merge requests`

這部分是落實「禁止普通合併 (Plain Merge)」與「強制壓縮 (Squash)」的核心技術手段。


| 配置項目 | 建議設定值 | 規範目的 |
| :--- | :--- | :--- |
| **Merge method** | **Fast-forward merge** | **核心要求**：不產生合併提交，維持線性歷史以利於 `nx affected` 判定。 |
| **Squash commits** | **Require** | **自動規範**：將 MR 雜亂提交壓縮為單一乾淨節點，維持主幹提交的獨立性。 |
| **Squash message** | **Custom / First commit** | 確保 `main` 分支的 Commit Message 具備說明意義。 |

---

## 2. 合併檢查 (Merge Checks)
**路徑：** `Settings > Merge requests` (下方的 Merge checks 區塊)

這部分是確保「主幹穩定」與「解決過時測試」的門檻。

* **Pipelines must succeed**：**開啟 (Checked)**。確保代碼在合併前必須通過 Nx 的 Lint、Build 與 Test。
* **Skipped pipelines are considered successful**：**關閉 (Unchecked)**。嚴格禁止跳過測試，跳過不代表成功。
* **All threads must be resolved**：**開啟 (Checked)**。確保 Code Review 的所有建議都已確實被執行或回應。

---

## 3. 分支保護設定 (Protected Branches)
**路徑：** `Settings > Repository > Protected branches`

這部分是防止開發者繞過規範，直接對主幹分支進行破壞性操作。

* **Protected branch**：`main`。
* **Allowed to merge**：`Developers + Maintainers`。
* **Allowed to push**：**No one**。強制所有人必須透過 MR 流程，禁止直接 Push。
* **Allowed to force push** | **關閉 (OFF)**。防止主幹歷史被重寫，確保 `nx affected` 基準 SHA 穩定。

---