# 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 穩定。 ---