2026 DeepSeek Harness 並行改程式碼:Git worktree 還是獨立複製?

本文面向需要在雲端或遠端 Mac 同時執行多個 DeepSeek Harness 編碼任務的個人開發者、研發團隊與平台工程師。文章比較 Git worktree、獨立複製與獨立環境的隔離範圍,並提供建立、驗收、取消及安全回收的可執行流程。

適合:同一個倉庫的短期平行改碼,採用「一個任務一個 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 官方文件)

可以共用的通常是可驗證、只讀且不會被任務修改的下載快取,例如已固定版本的套件下載檔;不宜共用的則包括以下項目:

  1. 會被建置工具改寫的 builddist、編譯中間檔;
  2. 以固定檔名保存狀態的測試資料庫、快照與報告;
  3. 會被程序鎖定的暫存目錄;
  4. 固定監聽同一埠號的開發伺服器;
  5. 放置 API key、SSH key 或客戶資料的 .env 與設定路徑。

平台工程師可以要求每個任務注入專屬路徑,例如 <TASK_ROOT>/build<TASK_ROOT>/tmp<TASK_ROOT>/reports,並透過環境變數讓建置工具讀取,而不是讓所有 worktree 自動落到倉庫根目錄。對無法指定產物路徑的工具,應使用獨立複製;若連環境變數與程序都不能分開,則升級到獨立遠端 Mac。

多個工作區共用依賴快取安全嗎?
只有在快取具備只讀特性、內容由鎖定檔驗證,且任務不會在原地修改快取時才可接受。若工具會清理、升級、重建或寫入全域索引,便應改用任務級快取目錄,否則一個取消中的建置可能留下另一個任務無法理解的中間狀態。

04平台團隊按責任鏈建立與回收

DeepSeek Harness 目前沒有在官方倉庫中被確認為會自動管理 Git worktree,因此自動建立、綁定、監控與回收應視為平台實施方案,而不是 Harness 的內建承諾。建議把流程拆成以下 6 步

  1. 建立任務記錄:產生 task ID,寫入擁有人、base ref、目標分支、工作區路徑及 session ID。
  2. 建立工作區:使用 git worktree add -b 建立新分支,立即執行 git worktree list --porcelain 驗證路徑與分支。
  3. 注入隔離路徑:為依賴、建置、暫存、報告及埠號設定任務級值;禁止從共享 shell 繼承未審核的 key 或工作目錄。
  4. 啟動會話:將工作區路徑和任務契約傳給 DeepSeek Harness,並記錄啟動時間、程序 ID 與最後一次活動時間。
  5. 取消前留證:停止會話與子程序,保存 git status --short、差異、測試報告、程序記錄及失敗原因。
  6. 安全移除:確認沒有未提交產物、鎖定程序或仍在寫入的檔案後,再執行 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 方案,以實際驗收結果決定是否升級到獨立複製或獨立環境。