【转】git worktree

4 篇文章 0 订阅

团队的一个痛点:在maint版本和feature版本交集阶段,在feature版本分支开发新特性过程中,当有maint版本的Bug时,需要切换到maint版本分支修复Bug——由于2个版本分支的工程依赖环境差异较大,导致每次切换分支后,工程都都需要重新安装依赖以及做全量编译——这无疑增加了编译时间,导致开发效率下降。

针对这个痛点,目前发现 git worktree 这个方案有助解决。

在这里插入图片描述

git worktree方案可以概括为:通过创建共享版本仓库的多个工作区,实现多分支并行开发,从而实现多个工程环境的缓存,达到提升开发效率的目的。具体地:

  • 可为一个分支创建一个工作区
  • 每个工作区的工程环境独立运行
  • 每个工作区共享同一个版本仓库信息

相比通过git clone方式创建多个独立工程环境的工作区,git worktree的优点在于:

  • 更节省硬盘空间
    git clone方式下,每个工作区都有一个版本仓库
    git worktree方式下,每个工作区共享同一个版本仓库,节省了n-1/n(n为工作区数量)的硬盘空间

  • 各个工作区之间的更新同步更快
    git clone方式下,A工作区和B工作区同步更新的路径:A工作区commit - A工作区push - B工作区pull
    git worktree方式下,A工作区只要本地提交更新后,其他工作区就能立即收到(因为它们共享同一个版本仓库)

git worktree的使用示例如下:

  1. 为maint_branch分支创建一个工作区maint_branch_worktree
# maint_proj 工程目录
cd path/to/maint_proj

# 创建工作区
git worktree add  ../maint_worktree maint_branch

如果需要拉取一个不存在的分支,可加-b参数,在拉取worktree的同时创建新分支

git worktree add ../new-dir -b a-not-existing-branch
  1. 进入工作区maint_worktree上完成修复Bug工作
# ios 工程目录
cd path/to/maint_worktree

# fix your bug
  1. 在工作区maint_worktree上完成修复Bug工作后,清理工作区maint_worktree
# maint_proj 工程目录
cd path/to/maint_proj

# 删除 maint_worktree 文件夹
rm -rf ../maint_worktree

# 清理工作区信息
git worktree prune

worktree指令汇总:

# 添加worktree 
git worktree add [-f] [--checkout -b <new-branch>] <path> <commit-ish> 

# 列出所有worktree 
git worktree list [--porcelain] 

# worktree上锁 
git worktree lock [--reason <string> <worktree>]

# worktree解锁 
git worktree unlock <worktree>

# 移动worktree到其他目录 
git worktree move <worktree> <new-path> 

# 清除那些检出目录已经被删除的worktree 
git worktree prune -n --expire <expire>

# 删除worktree, 同时删除检出目录 
git worktree remove -f <worktree>
  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值