2023年11月28日 星期二

使用 git worktree 達到同時檢視不同版本程式碼的效果

一直有個情境,我可能需要做feature或是hotfix 項目,但有些地方可能需要參考某個分支的版本,

此時我就必須先暫存目前的進度,然後切換到參考的分支,將要參考的檔案內容想辦法記錄起來,

然後切回剛剛暫存的進度,繼續開發...;後來發現這個情境,應該可以借用 git worktree …



git-worktree 指令可以方便產生多個工作目錄的情境,而出來的目錄可以任意放在其它路徑;雖然

有多個目錄都是吃到同一個 .git ,多生出來工作目錄的 .git 會指向原本的 .git 下的 worktree,故相

關分支上的修改,都還是可以任意合併,以下慢慢帶出


使用jquery 原始檔來示範


先 clone 下來


此時使用 vscode 開啟目標看一下


再來透過指令 worktree list 檢視一下目前工作目錄

 


先開個 dev 的本地分支出來,並且檢視工作目錄


由上圖可看出,即使目前我們切換到 dev 分支,工作目錄依然在temp\jquery



此時我們先來修改檔案 src\wrap.js


並且尚未 commit


再來要準備要產生新的工作目錄 jquery-hotfix,可以使用指令 

git worktree add -b [new branch name] [new folder name] [from branch]


[new branch name] :新的分支名稱

[new folder name]:新的工作目錄路徑與名稱

[from branch]:來源參考分支



建立完成後,檢視 worktree 及實際目錄,其中右方代表該目錄目前對應的分支



我們實際看一下存在著哪些分支


由以上我們看出來 hotfix 分支,實際是由 jquery 目錄下的 .git 管理


而jquery-hotfix 目錄下的 .git 應該是指到 jquery 下的 worktree



回到 jquery 的 .git/worktree 目錄下,可以看到 jquery-hotfix 資料夾


此時我們可以開啟 jquery-hotfix 下的 src\wrap.js 檔案,並且實現檢視某個版本的相同檔案


接下來先把上回 dev 修改簽入


再來切換到 jquery-hotfix 目錄並且查看 分支狀況


上圖得知

雖然命令提示字元右方 沒有寫是哪個分支,但是透過 git status 的訊息,可以看到目前為 hotfix 分支


此時我們修改 src\warp.js 檔案

再看一下狀態


此時簽入


再看一下狀態


此時我們將目錄切到 jquery,並且看一下狀態及分支


值得注意的是,若是另一個「工作目錄」其分支的顏色會不同


此時我們透過git指令將 jquery-hotfix 目錄移除,語法如下

git worktree remove [folder path]



查看目錄就只剩下 jquery 資料夾了




查看 jquery 目錄下的 .git / worktree ,發現已經移除了



查看分支,hotfix 還在


可以切換到 hotfix 分支檢視 src\warp.js 檔案




以上收工



【參考】

沒有留言:

張貼留言