本篇结构:
是什么 -> 为什么 -> 怎么用 -> 总结
1.什么是git worktree
git Worktree 是git提供的连接到统一仓库的多个工作树,一个主仓库可以引出多个不同分支的工作树并行开发(英文直译,废话)
2.为什么要使用git worktree
场景:
【产品A】:帮我改一下A功能,一会给领导先看一眼
【我】:好的,没问题
5 Minutes Later...
【产品B】: 帮我改一下B功能,一会要过一遍
【我】:我起着A分支服务在给他们过呢,我现在切不了分支啊,(来啊怼起来)
【产品B】:难道你不知道git有worktree吗?
【我】:。。。(吃瘪)
开发中经常会遇到,不用的需求和功能在不同的分支上。当在开发新功能的过程当中,需要修改其他分支的功能(或者是修改bug),这种情况下频繁的切换分支就相当麻烦,而且可能还在当前分支上起着服务,于是我们可以使用git worktree来解决这种问题。
git worktree vs git clone
git worktree 在表现结果上来看和重新git clone一个新仓库很接近。但是git worktree会同步本地仓库,本质上使用的是一个仓库。git clone 等于重开一个本地仓库,每次clone 比较耗时,而且也占用了很多不必要的资源。
3.如何使用
3.1.添加worktree
首先我们要使用worktree,第一步肯定是要先创建一个工作区
git worktree add [新路径] [分支]
操作之后会在指定路径生成新的目录,效果和clone一样,然后就可以在新目录上操作了
3.2.列出所有worktree
git worktree list
3.3.删除worktree
当工作区使用不到的情况,我们需要删除(适用于有洁癖的童鞋,作者通常一旦创建工作区,会长时间保留着)
我们可以直接删除目录,并执行
git worktree prune
注意
当存在worktree是某一个分支时,另一个worktree不能切换当前分支,如下图
其实也很容易理解,不用的worktree分支只是一个工作副本,如果多副本切到同一个分支,就会存在修改同步的问题。
4.总结
以上就是worktree日常使用方式,是不是很简单。很多同学都是看到就被吓跑,其实实操一遍都能掌握。当遇到开篇说的那种场景时,我们也不会手忙脚乱。总结一下worktree命令:
# 添加工作树(工作区)
git worktree add [<options>] <path> [<commit-ish>]
# 查看工作树列表
git worktree list [<options>]
# 锁定工作区(防止移动或删除)
git worktree lock [<options>] <path>
# 移动工作区
git worktree move <worktree> <new-path>
# 清空被删除的工作区信息
git worktree prune [<options>]
# 删除工作区
git worktree remove [<options>] <worktree>
# 修复工作区(例:当主工作区移动,副工作区无法连接等情况)
git worktree repair [<path>...]
# 解锁工作区(对应lock锁定工作区)
git worktree unlock <path>
5.参考资料
- git worktree文档:git-scm.com/docs/git-wo…