git worktree与分支依赖隔离
git worktree介绍
git worktree 是 Git 命令,用于管理多分支工作区。
使用场景:
- 同时维护不同分支,隔离分支依赖差异:从原有项目开辟一个分支作为另一个新项目,当两个项目依赖差距越来越大时,每次切换分支后都需要重新安装依赖。通过
git worktree可以隔离两个分支的依赖,并且两个分支可以互相merge、cherry-pick。 - 多个分支同步开发:允许在同一存储库中的不同分支上同时进行工作,而不需要频繁切换分支,这对于需要同时处理多个功能或修复多个 bug 的情况非常有用。
- 进行实验性更改:在不影响主工作目录的情况下,尝试进行实验性的更改或调试。
- 同时进行长期和短期任务:有助于同时处理长期开发任务和短期修复任务,而无需相互影响或混淆。
以下是 git worktree 的子命令:
add:在当前分支下创建一个新工作区。remove:删除一个已添加的工作区。list:显示所有已添加的工作区。lock:锁定工作区以防止在合并或其他操作时被意外删除。unlock:手动取消工作区的锁定。
git worktree add <path> [(-b | -B) <new-branch>]
在当前分支下创建一个新工作区,效果类似于git clone ,但新旧工作区属于同一个仓库,可以正常add、commit、merge等操作。
<path>:要创建的新工作区的路径,一般建立在当前目录的上一层,如../newpath。<new-branch>:要在哪个分支上创建工作区。如果未指定<new-branch>,则表示基于当前分支HEAD创建新分支<path>。-b表示基于当前分支HEAD创建新分支<new-branch>,-B表示强制创建。
# 基于HEAD创建工作区../brance1,分支为brance1
# 相当于 git worktree add ../brance1 -b brance1
git worktree add ../brance1
# 关联branch2创建工作区../brance1,分支为brance2
git worktree add ../brance1 branch2
# 基于HEAD创建工作区../brance1,分支为brance2
git worktree add ../brance1 -b brance2
git worktree remove <worktree>
移除worktree有两种方式。
- 方式一:
# 移除指定工作区<worktree>
git worktree remove <worktree>
- 方式二:直接删除工作区对应的文件夹,然后执行
# 清除worktree记录
git worktree prune
git worktree list
显示所有已添加的工作区。
git worktree list
# 显示完整的hash值
git worktree list --porcelain
git worktree lock <worktree>
用于锁定工作区<worktree>,以防止在合并或其他操作时被意外删除。
git worktree unlock <worktree>
解锁工作区<worktree>。
git worktree处理分支依赖冲突
背景
现在远程仓库有一个项目gitworktree,存在两个分支vue和react,两个分支作为两个项目并行开发,且两分支下的依赖存在差异。
步骤
- 将gitworktree目录下所有内容迁移到新的文件夹gitworktree/project1,方便在一个文件夹下管理。
- 在目录gitworktree/project1下,执行
git worktree add ../vue vue。执行完后可以发现gitworktree目录下存在两个文件夹,分别是project1 和 vue。 - 在目录gitworktree/project1下,执行
git worktree add ../react react。执行完后可以发现gitworktree目录下存在三个文件夹,分别是project1 、 vue 和 react。
这时候就可以愉快的玩耍了,可以像往常一样add、commit、merge,甚至cherry-pick!两个分支vue 和 react已经隔离开了,且依赖互不影响。
与往常不同的是,vue和react之间不能互相切换分支,只需要打开对应工作区即可进入对应的分支。
git worktree与分支依赖隔离的更多相关文章
- git worktree 是什么及其使用场景
先上总结: 在git worktree出现之前, git切换分支前后的文件都只存在在当前文件夹下, git worktree出现之后, 我们可以将分支切换到其他文件夹下 比如如果你的项目有很多个版本分 ...
- 再也不用克隆多个仓库啦!git worktree 一个 git 仓库可以连接多个工作目录
我在 feature 分支开发得多些,但总时不时被高优先级的 BUG 打断需要临时去 develop 分一个分支出来解 BUG.git 2.6 以上开始提供了 worktree 功能,可以解决这样的问 ...
- Git worktree 使用笔记【转】
gitworktree 本地仓库的多个分支在对应的文件夹内管理,能够减少很多操作,便捷高效~ 一 worktree 的基本概念和操作 再也不用克隆多个仓库啦!git worktree 一个 git 仓 ...
- git worktree 使用笔记
一 worktree 的基本概念和操作 再也不用克隆多个仓库啦!git worktree 一个 git 仓库可以连接多个工作目录 - walterlv的专栏 - CSDN博客 再也不用克隆多个仓库啦! ...
- git worktree 目录修复
三种方式挨个尝试,1不行用2 2不行用3 1.拉取阶段失败 git worktree add -f -B xxx_branch ./xxx_branch origin/xxx_branch 强制拉取 ...
- 接上篇:Git Worktree 高级使用,这样清爽多了
前言 上一篇文章 Git Worktree 大法真香 带大家了解了 git worktree 是如何帮助我同时在多个分支工作,并且互不影响的.但是创建 worktree 的目录位置不是在当前项目下,总 ...
- Git Pro - (2)分支
Git 保存的不是文件差异或者变化量,而只是一系列文件快照. 在 Git中提交时,会保存一个提交(commit)对象,它包含一个指向暂存内容快照的指针,作者和相关附属信息,以及一定数量(也可能没有)指 ...
- git worktree
git clone,不管是single-branch,还是non-single-branch,如果同时存在几个clone出来的branches,随着时间的推移,不停的编译.更新.编译...每个bran ...
- git 基于发布分支的开发
创建发布分支: (1) 软件hello-world的1.0发布版本库中有一个里程相对应. /home/jackluo/workspace/user1/workspace/hello-worldgit ...
- git 创建branch分支
开发者user1 负责用getopt 进行命令解析的功能,因为这个功能用到getopt 函数,于是将这个分支命名为user1/getopt.(1)确保是在开发者user1的工作区中cd /home/j ...
随机推荐
- 如何实现十亿级离线 CSV 导入 Nebula Graph
本文首发于 Nebula Graph Community 公众号 本次实践是基于业务需求及后续扩展,通过技术选型确定了 Nebula Graph 图数据库,首先需要验证 Nebula Graph 数据 ...
- [C++逆向] 8 数组和指针的寻址
目录 数组在函数中 字符串 数组作为参数 下标寻址和指针寻址 多维数组 存放指针类型数据的数组 指向数组的指针变量 函数指针 数组是相同类型数据的集合,以先行方式连续储存在内冲中 而指针只是一个保存地 ...
- 【2024面试刷题】一、Spring Cloud 面试题
1.什么是 Spring Cloud? Spring Cloud是一系列框架的有序集合.它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如 服务发现注册.配置中心.智能路 ...
- Mysql常用存储引擎以及区别?
InnoDB:是Mysql的默认存储引擎,支持事务.外键.如果应用对事务的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询之外,还包含很多的更新.删除操作,那么InnoDB存 ...
- 4、dubbo的高可用
1.zookeeper宕机与dubbo直连 现象:zookeeper注册中心宕机,还可以消费dubbo暴露的服务. 原因: 健壮性 l 监控中心宕掉不影响使用,只是丢失部分采样数据 l 数据库宕掉后, ...
- 远程服务调用(RPC与Rest本质区别)
一.背景 远程服务将计算机程序的工作范围从单机扩展到网络,从本地延伸至远程,是构建分布式系统的首要基础.远程服务调用(Remote Procedure Call,RPC)在计算机科学中已经存在了超过四 ...
- 单词本z develop vel = 到上面 从下面到上面的一种过程 抽象是相对从无到有
单词本z develop vel = 到上面 从下面到上面的一种过程 抽象是相对从无到有 develop 发展 开发 de = down 下面 velop 这里 vel 就是 lev的反写 op = ...
- Navicat 通过 Http通道 连接远程 Mysql
https://jingyan.baidu.com/article/3d69c551aa54dff0cf02d7a0.html 注意本机ip填写 localhost
- MK5 机械键盘 说明书
FN + 右箭头 就是加快节奏 FN + ScrLk 就是切换模式
- js实现展开多级数组
1.递归 function steamrollArray(arr) { let res = [] for (const a of arr) { if(a instanceof Array){ res ...