適合:同一個倉庫的短期平行改碼,採用「一個任務一個 Git worktree、一個會話一個工作區」;不適合:依賴、憑據、建置快取或資料信任邊界必須完全分開的任務,這時應改用獨立複製,甚至拆分 macOS 帳戶或整台 Mac。DeepSeek Harness 官方基準文件要求獨立任務使用不同工作區與 session ID,但目前不能把它解讀成 Harness 已經自動建立、綁定及回收 worktree。(官方 BENCHMARK 工作區規則)
這篇適合三類讀者:同時讓多個 Agent 修改同一倉庫、又不想互相覆蓋檔案的獨立開發者;需要管理遠端 Mac 執行池、建立回收與審計規則的平台工程師;以及要處理大型建置、客戶倉庫或不同密鑰集合的研發團隊。
00先按隔離目標選擇工作區
Git worktree、獨立複製與獨立環境不是三種同義做法,差別在於它們隔離的層級不同。Git worktree 主要隔離目前檢出的檔案、HEAD 與 index;獨立複製則連同 .git 管理資料、設定檔與本地倉庫狀態一併拆開;獨立環境再往上隔離作業系統帳戶、程序、環境變數、憑據與其他服務。
Git 官方文件說明,一個倉庫可以附帶多個 working tree,worktree 之間共享大部分倉庫資料,但每個工作區有自己的 HEAD、index 等 per-worktree 檔案。這代表它適合讓兩個分支同時存在,卻不等於每個任務都有完整的執行環境。(Git worktree 官方手冊)
| 方案 | 程式碼工作區 | 倉庫物件與設定 | 依賴、建置產物、埠號 | 憑據與身份 | 回收責任 |
|---|---|---|---|---|---|
| Git worktree | 各自目錄與分支 | 大部分共享 | 預設不隔離 | 不隔離 | 中等,須正確移除 |
| 獨立複製 | 各自完整複製 | 各自管理 | 可按複製路徑分開 | 仍須另行管理 | 較高,需清理整份倉庫 |
| 獨立環境 | 各自工作區 | 各自環境 | 可完整隔離 | 可分帳戶、密鑰與權限 | 最高,但責任邊界清楚 |
因此,若兩個任務只是分別修改不同模組,且共用相同版本的套件與工具鏈,Git worktree 通常是較快的起點;若任務會使用不同密鑰、不同客戶資料,或一個任務可能改寫另一個任務共用的快取,就不應把 worktree 當成沙箱。
| 任務情況 | 建議方案 | 必須額外設定 |
|---|---|---|
| 短期修正、不同檔案、可獨立合併 | Git worktree | 任務專屬分支、工作區、session ID |
| 同倉庫但依賴版本不同 | 獨立複製 | 各自安裝依賴,建置及暫存路徑分開 |
| 只讀分析或文件盤點 | worktree 或唯讀複製 | 禁止寫入共用產物及狀態資料 |
| 客戶資料、不同權限或不同 API key | 獨立環境 | 獨立 macOS 帳戶或獨立遠端 Mac |
| 同一檔案反覆被多個 Agent 修改 | 串行執行 | 先完成前一任務,再交給下一個會話 |
DeepSeek Harness 多個會話能不能使用同一個倉庫?
可以,但不應讓多個會話直接共用同一個 working tree。每個會話都應在明確指定的工作區啟動,並綁定獨立分支與 session ID。官方倉庫目前仍屬 developer preview,並明確提醒可能出現相容性破壞變更;因此平台流程不能假定未來版本會自動替管理者處理工作區。(DeepSeek Harness 官方倉庫)
01個人開發者先固定「一任務一分支」
個人開發者最容易犯的錯,不是選錯目錄結構,而是只建立兩個資料夾,卻沒有為每個 Agent 寫清楚任務所有權。第一個會話可能負責修測試,第二個會話可能進行重構;如果兩者都從相同分支開始,並在同一檔案留下未提交修改,最後仍然要人工判斷哪些差異屬於哪個任務。
建議把工作區名稱、分支、session ID、目標分支與回收條件寫進任務契約,例如:
git worktree add -b task/<task-id> <WORKTREE_PATH> <BASE_REF>
git worktree list --porcelain
每次啟動 DeepSeek Harness 前,工作管理器應把 <WORKTREE_PATH> 明確傳入會話,而不是依靠目前終端機所在目錄。官方基準文件對獨立任務採用不同工作區和 session ID 的要求,正好說明「會話識別」與「檔案位置」需要同時分開;只分開其中一項,仍可能造成結果混淆。
並行 Agent 修改程式碼如何避免分支衝突?
先按檔案範圍分配任務,然後規定每個任務只能提交自己的分支。若兩個任務都需要改同一個設定檔、資料模型或公共介面,應先把共同前置修改拆出來,完成後再建立後續 worktree;如果同一檔案會被高頻修改,直接改為串行,通常比事後解決多層合併衝突更容易驗收。
對只讀分析而言,工作區獨占程度較低;對測試修復而言,至少要獨占測試產物與報告路徑;對重構或 API 變更而言,則應把整個修改分支視為獨占資源。這是程式碼隔離規則,不代表程序或權限已經隔離。
02研發團隊把評審責任寫進任務契約
團隊環境不能只說「每個 Agent 使用自己的目錄」,還要記錄三個責任欄位:誰擁有任務、任務從哪個 base branch 開始、最後由誰負責合併或放棄。若缺少這些欄位,worktree 只能降低檔案覆蓋風險,不能解決錯誤分支被合併、測試結果被誤認或未提交產物無人負責的問題。
任務契約至少應包含:
- 任務 ID、負責人及 DeepSeek Harness session ID;
- base ref、目標分支與允許修改的路徑;
- 是否允許執行安裝依賴、建置、資料庫遷移或長時間程序;
- 測試命令、驗收輸出與取消後的保留期限;
- 合併、封存、回滾或人工接管的條件。
DeepSeek Harness 官方代理規則也把 session 資料、憑據參考、shell、檔案系統與 subprocess 列為不同能力模組,並要求真實 API 測試使用環境中的 key、不能提交憑據。這些資料顯示,工作區與身份、程序、密鑰本來就是不同管理面,不應用目錄隔離取代權限管理。(官方 AGENTS.md:session、credentials 與 subprocess 規則)
03大型建置先拆開產物與快取
Git worktree 共享倉庫物件,可以減少重複下載與倉庫管理負擔,但 Git 並不會自動替每個工作區隔離套件目錄、派生資料、測試報告或埠號。Git 官方設定文件亦指出,倉庫設定檔預設由 worktree 共用;需要工作區專屬設定時,才啟用 extensions.worktreeConfig,再用 git config --worktree 管理。(Git config 官方文件)
可以共用的通常是可驗證、只讀且不會被任務修改的下載快取,例如已固定版本的套件下載檔;不宜共用的則包括以下項目:
- 會被建置工具改寫的
build、dist、編譯中間檔; - 以固定檔名保存狀態的測試資料庫、快照與報告;
- 會被程序鎖定的暫存目錄;
- 固定監聽同一埠號的開發伺服器;
- 放置 API key、SSH key 或客戶資料的
.env與設定路徑。
平台工程師可以要求每個任務注入專屬路徑,例如 <TASK_ROOT>/build、<TASK_ROOT>/tmp 和 <TASK_ROOT>/reports,並透過環境變數讓建置工具讀取,而不是讓所有 worktree 自動落到倉庫根目錄。對無法指定產物路徑的工具,應使用獨立複製;若連環境變數與程序都不能分開,則升級到獨立遠端 Mac。
多個工作區共用依賴快取安全嗎?
只有在快取具備只讀特性、內容由鎖定檔驗證,且任務不會在原地修改快取時才可接受。若工具會清理、升級、重建或寫入全域索引,便應改用任務級快取目錄,否則一個取消中的建置可能留下另一個任務無法理解的中間狀態。
04平台團隊按責任鏈建立與回收
DeepSeek Harness 目前沒有在官方倉庫中被確認為會自動管理 Git worktree,因此自動建立、綁定、監控與回收應視為平台實施方案,而不是 Harness 的內建承諾。建議把流程拆成以下 6 步:
- 建立任務記錄:產生 task ID,寫入擁有人、base ref、目標分支、工作區路徑及 session ID。
- 建立工作區:使用
git worktree add -b建立新分支,立即執行git worktree list --porcelain驗證路徑與分支。 - 注入隔離路徑:為依賴、建置、暫存、報告及埠號設定任務級值;禁止從共享 shell 繼承未審核的 key 或工作目錄。
- 啟動會話:將工作區路徑和任務契約傳給 DeepSeek Harness,並記錄啟動時間、程序 ID 與最後一次活動時間。
- 取消前留證:停止會話與子程序,保存
git status --short、差異、測試報告、程序記錄及失敗原因。 - 安全移除:確認沒有未提交產物、鎖定程序或仍在寫入的檔案後,再執行
git worktree remove <WORKTREE_PATH>。
Git 官方手冊說明,直接刪除工作區目錄不會立即等同於正確移除 worktree 管理資料;後續可由 git worktree prune 清除遺留項目,但正常流程應優先使用 git worktree remove。此外,remove 預設拒絕移除不乾淨的工作區,強制移除必須由平台明確授權。(Git worktree remove、prune 與 repair)
回收失敗時,不應直接刪目錄再假設狀態已清乾淨。若存在未提交修改、未追蹤建置產物、仍在執行的程序或無法判斷的客戶資料,應保留工作區、輸出清單與程序記錄,標記為人工接管。只有在證據已封存、擁有人確認放棄,並且沒有仍在運行的工作時,才可使用強制回收。
05敏感專案按信任邊界升級方案
Worktree 解決的是版本控制工作區衝突,不是身份隔離,也不是資料外洩防護。若兩個任務使用不同權限級別、不同客戶倉庫或不同密鑰集合,即使它們位於不同 worktree,仍可能共享同一個 macOS 使用者的環境變數、SSH agent、憑據助手、網路連線與背景程序。
以下任一條件成立,就不應只用 worktree:
- 任務 A 可以讀取、任務 B 不應讀取的客戶資料位於同一個使用者帳戶;
- 不同任務需要不同 API key、SSH key 或雲端權限;
- 建置工具會啟動背景服務並持續寫入共享路徑;
- 任務包含資料庫、私有套件或不可回復的遷移;
- 客戶要求可撤銷、可審計且可單獨清除所有資料。
這時的選擇順序通常是獨立複製、獨立 macOS 帳戶,再到獨立遠端 Mac。獨立複製只處理倉庫與檔案層;獨立帳戶可以再分開部分使用者設定與憑據;獨立 Mac 才能把工作區、程序、權限與清理責任放到更清楚的資源邊界內。需要管理遠端登入、權限與連線設定時,可先參考 NUKCLOUD 使用說明;若是短期測試多個遠端工作區,也可從 NUKCLOUD 繁體中文服務頁 了解可用的交付方式。
06用同一組基準任務驗收方案
不要只用「成功建立兩個資料夾」判斷方案有效。平台團隊應以同一組基準任務測試三種方案:
- 兩個分支同時修改不同檔案;
- 兩個任務同時修改同一設定檔;
- 一個任務執行建置,另一個任務執行測試;
- 中途取消其中一個會話;
- 建立未提交檔案後嘗試回收;
- 回收完成後重新列出 worktree 與程序;
- 檢查另一個任務的依賴、產物、埠號及 session 是否仍正常。
可勾選的驗收清單如下:
- [ ] 每個任務都有唯一 task ID、分支、工作區路徑與 session ID。
- [ ] 兩個會話不會在同一個 working tree 啟動。
- [ ]
git worktree list --porcelain能列出正確的 HEAD、分支與路徑。 - [ ] 建置產物、測試報告與暫存檔不會寫入共享固定路徑。
- [ ] 共用快取被標記為只讀,且可以用鎖定檔驗證內容。
- [ ] 取消任務後,平台能保存差異、未追蹤檔案與程序記錄。
- [ ] 不乾淨工作區不會被自動強制刪除。
- [ ] 回收失敗時會保留證據並轉交人工處理。
- [ ] 涉及不同客戶、密鑰或權限時,方案會升級到獨立複製或獨立環境。
- [ ] 兩個任務高頻修改同一檔案時,排程器會切換為串行。
長期 AI 編碼任務是否適合 Git worktree,取決於任務是否短週期、分支是否清楚,以及產物是否可以被可靠回收;若會話長時間存活、依賴持續漂移、背景程序數量增加,worktree 的低磁碟壓力優勢會被回收與審計成本抵銷。此時,獨立複製或獨立 Mac 不是浪費,而是把責任範圍變得可追蹤。
如果目前方案是直接在同一個目錄切換分支,常見缺點是未提交修改互相覆蓋、建置產物污染下一次測試,以及取消任務後難以判斷哪些檔案可以刪除;若改用單一共用的雲端主機,還可能把憑據、背景程序與埠號混在同一個作業環境。對需要短期並行、可丟棄工作區或遠端 Mac 測試池的團隊,NUKCLOUD 提供的獨立 Mac 環境通常比臨時拼接共用目錄更容易驗收與回收;但若工作負載是長期穩定的重建置,或必須接觸實體介面,自購 Mac 仍可能更合理。
建議先用兩個可丟棄分支完成一次「平行修改、取消、留證、回收」測試;若現有 Mac 無法提供清楚的獨立工作區,或任務會長期佔用資源,再進一步查看 NUKCLOUD 遠端 Mac 方案,以實際驗收結果決定是否升級到獨立複製或獨立環境。