Git 的 worktree 是 Git 2.5 新增的功能,有點相見恨晚啊。
有在用 Git 的都知道如果工作目錄(working tree)修改到一半的話,是不能隨便切換 branch 的。解決方式是要麻是 git stash 先暫存起來,不然就是先暫時 commit 等會再 reset 回來。這都還好。
但是,還是會碰到一些需要同時處理不同 branch 的情況,例如想要同時修改或對照不同 branch,或是一邊跑測試一邊繼續寫code,甚至是想同時開發測試不同 branch 等等。這時候就得另外 clone 一個目錄,但這就是麻煩的開始,不同的 repo 目錄要怎麼同步最新的修改? 重新複製目錄? 先 git push 再 pull 一次? 總之就是有點繞啊。
git worktree
這個神奇的指令可以創造出另一個工作目錄,例如:
$ git worktree add -b hotfix ../hotfix master
Preparing ../hotfix (identifier hotfix)
HEAD is now at 46d363dc XXX
如此就會在上一層新建立一個 hotfix
目錄,並新建一個分支 hotfix
。這種工作目錄叫做 linked working tree。
cd ../hotfix
就是一個乾淨從 master 分出來的 hotfix 分支,可以在這邊做事。最後 commit 完事之後,直接 rm -rf
砍掉這個 hotfix 目錄(放心,東西已經進 branch,這可以砍掉了),接著 git worktree prune
就會清除 linked working tree 記錄了。不清除也沒關係,三個月後也會自動清掉。
不過如果你把 linked working tree 放在會被移除的裝置上,例如外接硬碟上,這樣可能會不小心被 Git 清掉。這時候需要用 git worktree lock 指令。
最後,git worktree list
則會列出目前所有的工作目錄。
謝謝分享~這需要這樣的功能呢
=口=!! 實用
好棒喔!! 謝謝分享。
(不過我看git-scm.com上是寫2.6之後才document的說XD)