AI界域的進化持續不斷,年初也依然忙於跟進和開發新技術。
在這種情況下,我們創建了一個名為 「vibe」 的CLI工具,以簡化Git Worktree的管理,讓開發流程更有效率。
Git Worktree是一項Git的標準功能,可以在一個倉庫中同時檢出多個分支。
通常,在切換分支時會使用 git checkout 或 git switch,但當從正在工作的分支A切換到另一個分支B時,檔案的內容會被切換。因此,存在以下問題:
使用Git Worktree,可以解決這些問題。 透過在不同的目錄中創建新的Worktree,可以在不影響原分支的情況下,並行進行不同分支的工作。
# 傳統方法
git checkout main
git checkout -b feature/new-feature # main的工作會中斷
# 使用Worktree的方法
git worktree add ../new-feature feature/new-feature # 可以繼續在main上工作
這樣可以實現以下使用方式:
作為在多個分支上並行工作的方式,還有「多次克隆倉庫」的選擇。然而,Git Worktree有著明顯的優勢:
如果多次克隆,則每個克隆都會生成一個 .git 目錄,並複製整個倉庫的歷史。而Git Worktree則是 共享Git物件,因此可以大幅節省磁碟空間。
此外,克隆時間也顯著縮短。對於多次克隆,需多次執行 git clone,但使用Git Worktree時,只需 第一次克隆後,再使用 git worktree add 就能創建新的工作目錄。git worktree add 不需要下載Git物件,只進行工作目錄的檢出,因此幾乎可以瞬間完成。
# 多次克隆的情況
project1/.git # 例:500MB(克隆30秒)
project2/.git # 例:500MB(克隆30秒)
project3/.git # 例:500MB(克隆30秒)
# 總計:1.5GB,90秒
# Git Worktree的情況
project/.git # 例:500MB(第一次克 clones 30秒)
project-worktree1/ # 只有工作樹(添加幾秒)
project-worktree2/ # 只有工作樹(添加幾秒)
# 總計:500MB + α,30秒 + α
對於大型倉庫或同時在多個分支上協作的情況下,這些差異是顯而易見的。
所有的Worktree共享相同的 .git 目錄,因此擁有以下優點:
git fetch 即可反映到所有Worktree.git/config 的設定在所有Worktree中共享# 克隆的情況:需要在各目錄分別fetch
cd project1 && git fetch
cd project2 && git fetch
cd project3 && git fetch
# Worktree的情況:一次fetch即可更新所有
cd project && git fetch
管理多個克隆時,容易迷失「在哪個目錄工作」。使用Git Worktree,可以透過 git worktree list 立即查看整體情況,管理起來會更容易。
$ git worktree list
/path/to/project abc1234 [main]
/path/to/project-feature def5678 [feature/new-ui]
/path/to/project-hotfix ghi9012 [hotfix/critical-bug]
基於這些理由,對於並行工作,我們強烈建議使用Git Worktree,而非倉庫的多次克隆。
Git Worktree是一個便利的功能,但在使用 git worktree add 之後,會出現拷貝 .env 等檔案、執行 npm install 或 build 等常規工作流程。
隨著AI代理的發展,並行工作已成為常態,但這些步驟變得繁瑣,因此我想創建這個工具以方便使用。
vibe 是一個管理Git Worktree創建、環境構建和刪除的CLI工具。
它是用Deno實現的,能在各種操作系統上運行。
在macOS上,可以使用Homebrew進行安裝。
brew install kexi/tap/vibe
也支持Deno (JSR)、Linux、Windows等。
詳情請參考倉庫的README。
https://github.com/kexi/vibe#installation
使用 vibe start <branch> 創建Worktree。可以互動式地創建目錄,或檢查已存在的Worktree。
vibe start feat/new-feature
在專案根目錄放置 .vibe.toml 可以定義創建Worktree時的行為。
.vibe.toml:
# 從父倉庫複製的檔案
[copy]
files = [
".env",
"config/*.json"
]
# 在創建Worktree之前和之後執行的命令
[hooks]
post_start = [
"npm install",
"claude"
]
在創建完Worktree後會立刻複製 .env 和設定檔,並進行 npm install 等設置,然後立即啟動 claude 等AI代理,開始編碼的工作流程。
這樣可以將從創建Worktree到開始編碼的時間縮短至幾乎為零。
不會中斷思考,能快速進入與AI的對話式編程體驗,令人一旦體會便難以回頭。
工作結束後,使用 vibe clean 刪除Worktree。
vibe clean
有關詳細的使用方法和設定選項,請參考倉庫的中文文件。
https://github.com/kexi/vibe/blob/main/README.ja.md
在使用Git Worktree進行並行工作時,使用vibe可以減少環境構建和檔案拷貝的麻煩,提高工作效率。
特別是在同時運行多個AI代理於不同分支時,更是便捷。
強烈建議您試用vibe!
功能需求或bug報告,請在以下倉庫的Issue中提交。