Featured image of post 使用 git worktree 進行並發分支開發Featured image of post 使用 git worktree 進行並發分支開發

使用 git worktree 進行並發分支開發

了解如何使用 git worktree 管理單獨目錄中的多個活動分支,而無需儲存切換或複製冗餘儲存庫。

介紹

在日常軟體開發中,在為功能分支編寫程式碼時經常會被緊急修復請求打斷。

傳統上,開發人員透過以下兩種方式之一處理此問題:

  1. 使用 git stash 暫時擱置活動更改,切換分支以修復錯誤,提交,切換回來,然後運行 git stash pop
  2. 將儲存庫的完全獨立的副本複製到另一個目錄中以處理修補程式。

然而,儲存在復原時存在衝突錯誤的風險,並且克隆相同儲存庫的多個副本會浪費磁碟空間並使本機提交同步變得複雜。

本機 git worktree 指令解決了這個問題。本文介紹如何使用 git worktree 同時處理多個分支,而無需上下文切換摩擦。


1.什麼是git工作樹?

git worktree 是一項本機 Git 功能,可讓您將多個分支檢出到電腦上的單獨目錄中,所有分支都連結到單一底層 .git 儲存庫

核心優勢

  • **不再隱藏:**您可以原樣保留活動工作區,並透過切換到不同的資料夾直接跳至修補程式。
  • 磁碟空間節省: 由於所有目錄共用一個 .git 歷史緩存,因此與多次複製儲存庫相比,磁碟開銷最小。
  • 保留建置快取: 單獨的目錄表示編譯器快取(例如 Vite、Webpack 或 Next.js 建置輸出)保持不變。您可以避免與來回切換分支相關的編譯延遲。

2. 使用 git worktree 的基本步驟

讓我們逐步了解如何建立和使用工作樹進行平行開發。

目錄佈局

您的專案工作區的結構將如下所示:

/my-project/ (Primary workspace: working on your feature branch)
/my-project-hotfix/ (Linked worktree workspace: checking out the hotfix branch)

第 1 步:新增連結工作樹

從主工作區目錄 (/my-project/) 中,執行下列命令以在單獨的資料夾中簽出新分支:

# git worktree add <target-path> <branch-name>
# Use the -b flag if you need to create a new branch
git worktree add ../my-project-hotfix -b hotfix/critical-bug

這將建立一個名為 my-project-hotfix 的新同級資料夾,並檢出並準備好 hotfix/critical-bug 分支。

第 2 步:切換資料夾和工作

導航到新資料夾,進行更改、提交並將其推送到遠端儲存庫。

cd ../my-project-hotfix
# Resolve the bug
git add .
git commit -m "fix: resolve critical production bug"
git push origin hotfix/critical-bug

my-project 資料夾中未提交的變更保持不變。

第 3 步:刪除工作樹

一旦修補程式被推送並合併,您就可以安全地刪除臨時工作樹。

導航回主儲存庫目錄並執行清理命令:

cd ../my-project

# List all active worktrees
git worktree list

# Remove the linked worktree (this also deletes the physical directory)
git worktree remove ../my-project-hotfix

工作區現在乾淨了。


3.重要限制因素

使用 git worktree 時,請記住以下規則:

[!重要] **您無法同時檢出多個活動工作樹中的同一分支。 **

例如,如果您的主工作區簽出了 main 分支,則嘗試執行 git worktree add ../another-path main 將會失敗。此安全防護措施可防止本地歷史記錄中發生衝突的提交追蹤。

結論

git worktree 指令是管理平行任務的重要工具,而不會失去在程式碼庫中的位置。

  1. **使用 git worktree add 建立一個單獨的目錄用於緊急任務。 **
  2. **使用 git worktree remove 提交變更並刪除資料夾。 **

git worktree 合併到您的 Git 工作流程中以簡化上下文切換並提高開發速度。