# 工作區隔離 (/zh-Hant/docs/verdent-manager/advanced-features/workspace-isolation)

> Verdent 如何透過 git worktrees 分隔平行的程式碼變更



工作區隔離會透過 git worktrees 在檔案系統層級分隔平行的程式碼變更。每個工作區都有自己的目錄、分支 checkout、檔案與 staging 狀態。

<Note>
  目前 Verdent Desktop 介面未提供手動建立工作區的功能。**New Workspace** 按鈕、其鍵盤快捷鍵，以及 **Duplicate to New Workspace** 都已隱藏。複製回應會在目前工作區中建立新任務。
</Note>

***

## 你將學到什麼 [#你將學到什麼]

* 工作區隔離如何避免衝突
* git worktrees 如何實現隔離
* Base Workspace 與 Workspaces 的差異
* 既有工作區與 Verdent 管理的工作區如何顯示在介面中
* 工作區管理的最佳實務

***

## 什麼是工作區隔離？ [#什麼是工作區隔離]

當 Verdent 在不同工作區中執行工作時，某個 worktree 的變更不會修改另一個 worktree 的檔案或 staging 狀態。這讓平行實作與審查更安全。

### 運作方式 [#運作方式]

| 層級          | 運作方式                    |
| ----------- | ----------------------- |
| **目錄**      | 每個工作區都是隔離的目錄            |
| **分支**      | 每個工作區都有自己的分支 checkout   |
| **檔案**      | 某個工作區中的檔案變更不會影響其他工作區    |
| **Staging** | 每個工作區都有自己的 staging area |

### 優點 [#優點]

<CardGroup cols="2">
  <Card title="零干擾" icon="shield-halved">
    檔案變更會保留在不同的 worktree 目錄中
  </Card>

  <Card title="安全實驗" icon="flask">
    嘗試有風險的變更，而不影響穩定的程式碼
  </Card>

  <Card title="清楚比較" icon="code-compare">
    使用 git diff 比較不同工作區中的做法
  </Card>

  <Card title="選擇性 Rebase" icon="code-merge">
    只 rebase 你信任的結果
  </Card>
</CardGroup>

***

## Base Workspace vs Workspaces [#base-workspace-vs-workspaces]

### Base Workspace [#base-workspace]

Base workspace 是你原本的 repository checkout，作為預設的起點。

| 特性       | 說明                         |
| -------- | -------------------------- |
| **位置**   | 你原本的 git clone 或 init 位置   |
| **主要分支** | 通常位於 main 或 development 分支 |
| **參考點**  | 用於比較實驗性工作的來源               |

**何時使用 Base：**

* 不需要隔離的快速變更
* 比較實驗性工作的參考點
* 當你希望變更直接進入主分支時
* 不需要平行執行的簡單任務

### Workspace [#workspace]

Workspace 是使用 git worktrees 建立的隔離工作環境，具有自己的獨立分支 checkout 與檔案狀態。

當支援的工作流程需要隔離的程式碼變更時，Verdent 可以使用工作區。既有工作區會持續與其專案關聯，並且可以包含多個任務。

***

## 使用既有工作區 [#使用既有工作區]

已屬於某個專案的工作區會繼續在 Projects panel 中與該專案分組。選取工作區即可檢視其任務與檔案狀態。

* 同一個工作區內的任務共用其檔案，但保有各自獨立的對話上下文。
* 切換到另一個工作區會變更目前作用中的 worktree 與分支上下文。
* 複製回應會讓複製出的任務保留在目前工作區中。
* 只有在 commit、rebase，或以其他方式保留你需要的工作之後，才刪除工作區。

***

## Rebase 工作區變更 [#rebase-工作區變更]

當你準備好將工作區變更整合回主分支時：

### 使用 Verdent UI [#使用-verdent-ui]

<Steps>
  <Step title="完成工作">
    在工作區中完成工作
  </Step>

  <Step title="審查變更">
    點擊中間面板中的 **Task Changes** 以審查所有修改
  </Step>

  <Step title="Rebase 到主分支">
    在 Workspace Bar 中點擊 **Workspace Actions → Rebase to main branch**
  </Step>

  <Step title="解決衝突">
    若系統提示，請解決任何衝突
  </Step>

  <Step title="驗證">
    確認前先審查變更
  </Step>
</Steps>

### 讓工作區保持最新 [#讓工作區保持最新]

使用 **Workspace Actions → Sync with main branch** 將主分支的最新變更拉進你的工作區。這有助於在 rebase 時避免大型衝突。

***

## 最佳實務 [#最佳實務]

### 工作區維護 [#工作區維護]

| 實務                  | 原因           |
| ------------------- | ------------ |
| **刪除已 rebase 的工作區** | 釋放磁碟空間       |
| **移除已放棄的實驗**        | 讓工作區清單保持易於管理 |
| **將工作區數量維持在合理範圍**   | 系統資源有限       |

### Git 衛生 [#git-衛生]

| 實務              | 原因                         |
| --------------- | -------------------------- |
| **經常 commit**   | 切換前先 commit 進行中的工作         |
| **小型 commit**   | 較小的 commit 更容易 cherry-pick |
| **定期與 base 同步** | 不要讓工作區與主分支偏離太遠             |
| **降低衝突複雜度**     | 定期整合可避免大型衝突                |

***

## FAQs [#faqs]

<AccordionGroup>
  <Accordion title="每個工作區會使用多少磁碟空間？">
    每個工作區會複製工作檔案，但共用 `.git` 目錄。空間使用量大致等同於每個工作區一份你的專案大小。大型專案若有許多平行工作區，會使用大量磁碟空間。
  </Accordion>

  <Accordion title="我可以刪除工作區嗎？">
    可以。透過 Verdent 刪除工作區。這會移除目錄，但會保留該分支上任何已 commit 的工作。
  </Accordion>

  <Accordion title="我要如何建立新的工作區？">
    目前 Desktop 介面不提供手動建立功能。**New Workspace** 入口與快捷鍵已隱藏。Verdent 仍可在支援的隔離工作流程中於內部使用工作區。
  </Accordion>

  <Accordion title="如果我刪除工作區，未 commit 的變更會怎樣？">
    刪除工作區時，未 commit 的變更會遺失。移除工作區前，務必先 commit 或 stash 變更。
  </Accordion>

  <Accordion title="我可以將工作區轉換成 base workspace 嗎？">
    沒有直接轉換方式，但你可以將工作區中的所有變更 rebase 到主分支，然後刪除該工作區。分支歷史會被保留。
  </Accordion>

  <Accordion title="worktrees 是否適用於所有 git hosting services？">
    是。Git worktrees 是標準 git 功能。它們適用於 GitHub、GitLab、Bitbucket，以及任何其他 git hosting service。
  </Accordion>
</AccordionGroup>
