Environment Setup

2026 在雲 Mac 上用 Git 工作樹並行維護 HTML/CSS 分支

MacHTML Lab2026.03.27 約 11 分鐘閱讀

靜態站點或組件庫上線前,常同時要改兩條緊急分支:一條修生產環境 CSS,一條做下周落地頁。再克隆一份倉庫既佔磁碟又費心力。Git worktree 讓你在同一對象庫上並行檢出多個分支,特別適合把「第二臺機器」換成可 SSH 的雲 Mac mini,在上面跑 Safari 與構建,而筆記本只保留一個主克隆寫代碼。

為什麼 HTML/CSS 團隊用 worktree

傳統流程——stash、checkout、pull、再跑一遍 npm install——往往只為了改十幾行 hero 區 CSS,上下文全丟。worktree 讓每個分支待在獨立目錄裡、歷史仍共享,於是 A 目錄可以一直開著 npm run dev,B 目錄並行 npm run build,不必來回切分支。

在 Apple Silicon 上,依賴安裝依然耗時:即便 Git 對象共用,每個 worktree 下的 node_modules 對「Vite + Tailwind」這類棧也常佔 250–400 MB。規劃三個活躍樹意味著僅依賴就可能逼近 1.2 GB,再加構建產物——雲 Mac 磁碟寬裕時很輕鬆,256 GB 筆記本若還要裝照片與 Docker 鏡像就會吃緊。

對需要同時對照設計稿與 DOM 的前端,worktree 還能讓「熱修分支」與「特性分支」各用一套本地 URL,減少誤把未合併樣式提交到錯誤分支的概率。評審時也可以把兩個目錄的 diff 並排給設計師看,而不必反覆切換檢出。

日常必備命令

在主倉庫路徑下為兄弟目錄增加檢出:

git fetch origin
git worktree add ../site-hotfix origin/hotfix/css-hero
git worktree list

合併完成後移除對應目錄:

git worktree remove ../site-hotfix

若提示有未提交改動,先提交或確認無用後再 --force。若曾手滑 rm -rf 刪過目錄,用 git worktree prune 清理元數據,避免 git worktree list 裡出現幽靈條目。

工作樹、全量克隆與獨立倉庫

方式Git 對象佔用複雜度適用
第二次完整克隆重複 .git物理隔離機器
worktree共享對象庫同遠端、多分支並行
獨立倉庫(fork)獨立歷史供應商代碼與主倉遠端不一致

開發伺服器、埠與 Safari 標籤

每個 worktree 是獨立根目錄,可在一個裡跑 npx vite --port 5173,另一個 --port 5174。請在 README 或團隊文檔寫清:熱修 → 5173,卡片特性 → 5174。遠程會話裡 Safari 固定標籤頁容易丟,可把兩個 URL 存書籤,或寫個小腳本在起服務後 echo 連結。

若你同時用 SSH 跑命令、偶爾用 VNC 看像素,可參考 雲 Mac 上 SSH 與 VNC 的對比,把長任務放在 SSH 會話,需要並排對比兩個分支的 Safari 表現時再開圖形。

埠衝突常見於忘了關舊進程:用 lsof -i :5173 找到佔用者再結束,比盲目改埠更能避免 CI 與本地文檔不一致。

刪除目錄前的清理清單

  1. 在 Git 託管平臺確認分支已合併或廢棄。
  2. 停掉 watch 進程(Ctrl+C),避免文件句柄未釋放。
  3. 優先 git worktree remove <路徑>,少用手動 rm -rf
  4. 若已手動刪除,檢查是否殘留 dist/.vite 緩存。
  5. 實驗性安裝過多時可跑 npm cache verify 回收空間。

跳過第三步容易導致 git worktree list 與真實目錄不一致,自動化腳本若帶 30 秒 超時遍歷樹,會莫名失敗——元數據和人類一樣需要定期打掃。

Prettier、ESLint、Stylelint 的緩存常在各樹自己的 node_modules/.cache;若把緩存目錄硬連結共享,可能在某一分支升級插件大版本後汙染另一分支的格式化結果。更穩妥是接受重複緩存,直到磁碟監控連續一周高於 85 % 再討論統一緩存策略。

靜態導出(Eleventy、Astro 靜態模式)在大版本發布日可對每個樹順序執行 npm run build:四棵樹若各開 八個 worker 並行,M4 Pro 上也可能 CPU 打滿。可在 Node 啟動參數加 --max-old-space-size=4096,並在 Console.app 關注是否出現內存壓力日誌。

為什麼在租用 Mac 上跑 worktree

機房裡的 Apple Silicon Mac mini 像共享構建櫃:大家把分支推到同一臺機,在 /Users/ci/sites/ 下按規範路徑 git worktree add,評審完再刪。筆記本保留一個主克隆寫邏輯;重型並行安裝放在按時計費的雲端,磁碟與電費壓力都更小。

若 SSH 密鑰與 config 尚未理順,請先讀 遠程 Mac 配置指南,再寫自動化添加 worktree 的腳本——穩定的認證比花哨的目錄命名更重要。

成熟團隊會把 git worktree add 包進 Makefile 或三十行以內的 shell:順帶 npm ci 並列印 dev URL。路徑可統一為 /var/tmp/worktrees/$BRANCH_SLUG,slug 截斷到 48 個字符,避免 Webpack 寫深層臨時文件時撞上 macOS 路徑長度上限。

子模塊與 worktree 要格外小心:每棵樹可能都要單獨 git submodule update --init。使用 Git LFS 的資源倉庫記得每樹執行 git lfs pull,否則會出現「CSS 構建成功但 Safari 裡 hero 視頻 404」這類怪問題。

CI 發預覽連結時,在 Slack 裡同時標註 worktree 路徑(例如 熱修 → ~/wt/hero),評審者 SSH 進去不會找錯目錄。每人省三分鐘上下文切換,四個人一輪評審就能抵消不少租賃分鐘成本。

可再配一個 worktree-health.sh,輸出磁碟剩餘、活躍 node 進程與各 dev server 日誌最後五行,用 cron 或 LaunchAgent 每 15 分鐘 跑一次;確認沒有孤兒 webpack 再 git worktree remove --force,避免誤殺仍在寫的進程。

共享主機上每個 worktree 繼承同一套憑據助手,若外包人員曾登錄 shell,合併後記得輪換部署密鑰。各樹 .env.local 建議 chmod 600,不要把密鑰複製到多個分支目錄——未合併的熱修樹在刪除前始終可讀。

大改版前可用 tmutil localsnapshot 做本機快照,或給 dist/ 打個 tarball,避免某次 CSS purge 腳本誤傷所有活躍樹時無處回滾。

常見問題

一臺 Mac 上建議保留幾個 worktree?

在 256 GB 磁碟上多數團隊把活躍 worktree 控制在三到六個之間。每個工作樹仍有獨立工作區與 node_modules,除非使用高級工具共享依賴,建議每周用 df -h 觀察空間。

worktree 會共享 Git 對象嗎?

會。同一倉庫下的多個 worktree 共用一份 .git 對象庫,比重複 git clone 更省空間;但 node_modules 不會自動共享。

能同時跑兩個 Vite 嗎?

可以,為每個目錄顯式指定埠,例如 --port 5173 與 --port 5174,並在團隊文檔裡寫明映射。Safari 可同時打開兩個 localhost 做視覺對比。

Git worktree 不能替代清晰的分支命名,但能去掉「反覆 checkout」的摩擦;與一臺常開、環境接近生產的 Mac mini 搭配時,特別適合在發布周並行多條 HTML/CSS 車道。按日租用雲端算力,高峰多加幾棵樹,發布結束後刪掉 worktree、縮減開支,比為峰值單獨採購機器更靈活。

並行分支需要並行磁碟空間

租用雲 Mac mini,共享 worktree、Safari 評審與長時間 dev server。先選區域,再按幫助中心完成 SSH 與密鑰配置。

雲 Mac 上跑 worktree
低至 $16.9/天