git worktree 依赖隔离、多分支开发图文详解

1 前言

  • 今天做项目开发时,发现切换分支后,有一个功能就会有问题,原因是因为两个分支的依赖项不一致,导致每次切换分支时都需要 npm install 一下,那有没有什么办法能做到依赖隔离呢?
  • 我们切换分支开发时,若有不想提交的代码,一般是使用 git stash 暂存起来,然后 git checkout ,开发完成后再使用 git stash pop 将暂存取出来继续开发。但是 git checkout 的开发都是基于同一个文件进行修改,而 node_modules 都会被记录到 .gitignore 文件下进行 git 忽略,所以不会被 git stash 暂存上,如果有依赖变化,切换分支之后 node_modules 使用的是上一个分支的最新依赖,可能会导致原分支上的功能不可用。
  • 使用 git worktree 可以做到依赖隔离,且只需要维护一个仓库,又可以同时在多个分支上进行工作

2 常用命令

2.1 查看所有 worktree

git clone 一个项目之后,都会有一个默认的 worktree

git worktree list

在这里插入图片描述

2.2 添加 worktree

git worktree add 路径名

git worktree add test
  • 在当前目录下新增一个 test 文件夹
  • test 文件夹的内容为当前分支的克隆文件
  • 默认新增一个 test 分支
git worktree add ../test
  • 在上一层级目录下新增一个 test 文件夹
  • test 文件夹的内容为当前分支的克隆文件
  • 默认新增一个 test 分支

git worktree add 路径名 -b 新分支名

git worktree add test -b dev
  • 在当前目录下新增一个 test 文件夹
  • test 文件夹的内容为当前分支的克隆文件
  • 新增一个 dev 分支

git worktree add 路径名 -b 新分支名 远程分支名

git worktree add test -b dev origin/dev
  • 在当前目录下新增一个 test 文件夹
  • test 文件夹的内容为远程分支 origin/dev 的克隆文件
  • 新增一个 dev 分支

2.3 移除 worktree

git worktree remove 工作树名

git worktree remove test

2.4 清洁 worktree

git worktree prune

3 图文详解

  • vscode 打开 commitTest 文件夹,此时本地分支为 master 分支,在该分支上安装了一个 moment 包
    在这里插入图片描述

  • 新增一个名为 test 的 worktree
    新生成的 test 文件夹下自动 clone 与本地 master 分支一样的内容(有eslint,但没有上一步在本地 master 分支上安装的 moment,只会 clone 已经 commit 的内容)
    在这里插入图片描述

  • 为了方便比较, 重新打开一个 vscode ,打开文件夹为 test 文件夹
    安装 axios 包,并新增一个 txt 文件,此时, test 文件夹下的 node_modules 有 axios ,但没有 moment
    在这里插入图片描述

  • commitTest 文件夹下的 node_modules 只有 moment , 没有 axios , 依赖已隔离
    在这里插入图片描述

  • 可正常执行 git add 、 git commit 、 git push 等操作
    在这里插入图片描述

  • 远程仓库上新增了 test 分支, package.json 记录的安装包为 eslint 和 axios ,与本地 worktree 一致
    在这里插入图片描述

  • 执行 git worktree remove test , test 文件夹将被删除,但 test 分支会被保留
    在这里插入图片描述

4 注意事项

  1. 当前 worktree 使用完后,记得执行 git worktree remove ,避免文件越来越多占用磁盘内存
  2. 建议新增 worktree 后, vscode 打开 worktree 新增的文件夹进行开发,否则没有修改内容对比
  3. 若本地存在与新增 worktree 同名分支,会 clone 与本地同名分支的内容
  • 执行 git worktree add 路径名,默认生成与路径名同名的新分支
  • 若本地没有同名分支,则 clone 内容为当前分支的克隆文件
  • 若本地有同名分支,则 clone 内容为同名分支的克隆文件

在 master 分支上执行以下命令,新增一个名为 clone 本地分支

git worktree add clone
git worktree remove clone
git checkout dev

在 dev 分支上执行以下命令, copy 与 clone 文件夹下的内容不同

git worktree add copy
git worktree add clone

在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_36757282/article/details/128712125