你是小阿巴,正在用 AI 幫你開發(fā)一個(gè)《美吉外賣》項(xiàng)目。
好家伙,任務(wù)有點(diǎn)多啊!
首頁(yè)商家列表:展示附近的外賣商家
搜索功能:搜索想吃的菜品或商家
個(gè)人中心頁(yè)面:查看訂單歷史、修改收貨地址
你靈機(jī)一動(dòng):不如讓 3 個(gè) AI 同時(shí)幫我寫代碼,效率豈不是直接翻 3 倍?!
說干就干,你在同一個(gè)項(xiàng)目文件夾下打開了 3 個(gè) AI 對(duì)話窗口,分配不同的任務(wù),讓 AI 們同時(shí)開工,美滋滋~
![]()
結(jié)果你發(fā)現(xiàn),AI 們?cè)趫?zhí)行過程中修改了同一個(gè)文件,相互覆蓋,導(dǎo)致代碼全亂套了!
這個(gè)問題可難不倒你,你心想:俺只要手動(dòng)把項(xiàng)目文件夾復(fù)制 3 份,每份交給一個(gè) AI 單獨(dú)干活不就好了?
![]()
這次,3 個(gè) AI 都順利完成了任務(wù),但是你卻傻眼了:我怎么把 3 份代碼合并到一起啊?!難道要人工一行行比對(duì)、手動(dòng)復(fù)制粘貼?那不得累死……
![]()
你趕緊向號(hào)稱「AI 編程之狗」的魚皮求救。
魚皮聽完,淡定地說:用 Git WorkTree 啊。
你一臉懵:雞特?臥客吹?這都是啥玩意兒?
Git 是啥?
魚皮:Git 是目前最流行的代碼版本管理工具,幾乎所有程序員都在用。
簡(jiǎn)單來說,Git 就是代碼的時(shí)光機(jī)。
當(dāng)你用 Git 管理項(xiàng)目時(shí),每次保存代碼都會(huì)形成一個(gè) 版本,就像游戲里的存檔點(diǎn)。如果寫錯(cuò)了代碼,隨時(shí)可以回到之前的版本,再也不怕 AI 把項(xiàng)目搞崩了。
![]()
而且多人協(xié)作開發(fā)時(shí),每個(gè)人可以拉一個(gè)自己的 分支,就像從主干上長(zhǎng)出的樹枝,各寫各的互不影響,寫完再合并回主干。
![]()
接下來我要教你的 WorkTree,就是 Git 的一個(gè)隱藏技能。
什么是 Git WorkTree?
魚皮:正常情況下,一個(gè)項(xiàng)目的 Git 倉(cāng)庫(kù)只有一個(gè)工作目錄,也就是說你同一時(shí)間只能在一個(gè)分支上干活。想切換分支,就得先保存手頭的代碼,從當(dāng)前分支爬下來,然后再爬到另一個(gè)分支上開始干活,來回折騰。
![]()
但用了 WorkTree,你可以讓一個(gè)倉(cāng)庫(kù)同時(shí)擁有多個(gè)工作目錄,每個(gè)目錄對(duì)應(yīng)不同的分支,你可以開啟分身術(shù),同時(shí)在不同的分支上干活,互不干擾。
![]()
你撓了撓頭:等等,那不是也會(huì)多出好幾個(gè)文件夾嗎?和我剛才手動(dòng)復(fù)制有啥區(qū)別?
魚皮:區(qū)別大了!你手動(dòng)復(fù)制的是整個(gè)倉(cāng)庫(kù),每份都有完整的 .git 目錄和歷史記錄,不僅占用空間;而且寫完代碼后,還得跨多個(gè)文件夾對(duì)比代碼、手動(dòng)合并,費(fèi)時(shí)又容易出錯(cuò)。
而 WorkTree 創(chuàng)建的文件夾,只是 鏈接 到同一個(gè) .git 目錄。就像同一棵樹上長(zhǎng)出的不同枝干,雖然各自開枝散葉,但根系是共享的,本體只有一棵樹。
![]()
你恍然大悟:所以我在任意一個(gè)工作樹里提交代碼,其他工作樹也能看到這次提交?
魚皮:沒錯(cuò),因?yàn)樗鼈儽举|(zhì)上是同一個(gè) Git 倉(cāng)庫(kù)。
怎么用 Git WorkTree?
你兩眼放光:聽起來有點(diǎn)兒夯啊,快教我怎么用!
魚皮:很簡(jiǎn)單,就幾條命令。
比如你的項(xiàng)目在 meiji-takeout 文件夾,想同時(shí)搞首頁(yè)商家列表、搜索功能和個(gè)人中心這 3 個(gè)功能,可以創(chuàng)建 3 個(gè)工作樹,分別對(duì)應(yīng) 3 個(gè)功能分支:
# 創(chuàng)建 3 個(gè)工作樹,對(duì)應(yīng) 3 個(gè)功能分支
git worktree add -b feat/shop-list ../feat-homepage
git worktree add -b feat/search ../feat-search
git worktree add -b feat/user-profile ../feat-profile
執(zhí)行完之后,你的項(xiàng)目文件夾結(jié)構(gòu)就變成了:
/projects/
├── meiji-takeout/ ← 主倉(cāng)庫(kù)(main 分支)
├── feat-homepage/ ← 工作樹1(首頁(yè)商家列表)
├── feat-search/ ← 工作樹2(搜索功能)
└── feat-profile/ ← 工作樹3(個(gè)人中心)
每個(gè)文件夾都是一個(gè)完整的工作目錄,可以獨(dú)立寫代碼、提交、推送。
你激動(dòng)了:那我在每個(gè)文件夾里分別開一個(gè) AI 編程助手,讓 3 個(gè) AI 各干各的,豈不是美滋滋?
魚皮:沒錯(cuò),這就是 WorkTree 在 AI 時(shí)代最香的用法。每個(gè) AI 一個(gè)工作樹,并行開發(fā),互不打擾。
![]()
三個(gè) AI 同時(shí)干活
像 Cursor 這樣的 AI 編程工具,已經(jīng)內(nèi)置了 WorkTree 的支持。你可以直接在 Cursor 里開啟 Parallel Agents(并行代理)模式,它會(huì)自動(dòng)幫你創(chuàng)建和管理工作樹,讓多個(gè) AI 同時(shí)干活,完成后一鍵將代碼合并到主分支。
![]()
開發(fā)完怎么合并?
你:3 個(gè)功能都開發(fā)完成了,最后代碼怎么合并到一起呢?
魚皮:流程很簡(jiǎn)單,輸入幾行命令就好了,當(dāng)然你也可以讓 AI 幫你完成。
1)每個(gè)工作樹里的代碼完成后,先用 git add . 命令把改動(dòng)的文件添加到 Git 的暫存區(qū),然后用 git commit 命令提交保存。
git add .
git commit -m "完成首頁(yè)商家列表"
2)接著切回主分支,用 git merge 命令把各個(gè)功能分支的代碼依次合并進(jìn)來就行了。
cd ../meiji-takeout
git merge feat/shop-list
git merge feat/search
git merge feat/user-profile
3)合并完之后,記得用 git worktree remove 把用完的工作樹刪掉,保持項(xiàng)目整潔。
git worktree remove ../feat-homepage
git worktree remove ../feat-search
git worktree remove ../feat-profile
4)最后,如果你的代碼托管在 GitHub 開源平臺(tái)上,執(zhí)行 git push 命令同步到遠(yuǎn)程就完事了。
你突然想到:等等,那如果兩個(gè) AI 恰好改了同一個(gè)文件,會(huì)怎么樣?
魚皮:那在合并的時(shí)候會(huì)產(chǎn)生 沖突,Git 會(huì)提示你哪些地方有沖突,需要你手動(dòng)決定保留誰(shuí)的代碼、刪掉誰(shuí)的代碼。
![]()
你皺起眉頭:那不是很麻煩?我又看不太懂 AI 寫的代碼……
魚皮:所以分配任務(wù)時(shí),要盡量讓不同的 AI 改不同的文件。比如剛才的首頁(yè)商家列表和搜索功能,都會(huì)用到 “商家列表” 這個(gè)組件,就不適合拆給兩個(gè) AI 分別做,最好交給一個(gè) AI 一把梭。而個(gè)人中心是獨(dú)立的模塊,可以放心交給另一個(gè) AI。
![]()
總之,WorkTree 給了你讓多個(gè) AI 并行寫代碼的能力,但任務(wù)怎么拆,還得你自己規(guī)劃好。
結(jié)尾
你興奮地搓搓手:所以有了 WorkTree,AI 們各自在獨(dú)立的文件夾里干活,不會(huì)打架;合并代碼時(shí)也不用手動(dòng)復(fù)制粘貼了,一舉兩得啊!
以后我指揮多個(gè) AI 同時(shí)干活,效率直接起飛!
魚皮:不錯(cuò),多了解一些編程技術(shù)和工具能讓你的 AI 開發(fā)效率翻倍。如果你想系統(tǒng)學(xué)習(xí) AI 編程,可以看看我免費(fèi)開源的 ,從入門到實(shí)戰(zhàn)一條龍講解。點(diǎn)個(gè)收藏關(guān)注不迷路~
![]()
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.