本文介绍: 今天做项目开发时,发现切换分支后,有一个功能就会有问题,原因是因为两个分支的依赖项不一致,导致每次切换分支时都需要 npm install 一下,那有没有什么办法能做到依赖隔离呢?我们切换分支开发时,若有不想提交的代码,一般是使用 git stash 暂存起来,然后 git checkout ,开发完成后再使用 git stash pop 将暂存取出来继续开发。
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 test
git worktree add ../test
git worktree add test -b dev
git worktree add test -b dev origin/dev
2.3 移除 worktree
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
-
远程仓库上新增了 test 分支, package.json 记录的安装包为 eslint 和 axios ,与本地 worktree 一致
4 注意事项
- 当前 worktree 使用完后,记得执行 git worktree remove ,避免文件越来越多占用磁盘内存
- 建议新增 worktree 后, vscode 打开 worktree 新增的文件夹进行开发,否则没有修改内容对比
- 若本地存在与新增 worktree 同名分支,会 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
原文地址:https://blog.csdn.net/weixin_36757282/article/details/128712125
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_32462.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。