worktree的路径的文件夹自己重命名后发现没有git
1. worktree
title: worktree的路径的文件夹自己重命名(修改名称)后发现没有git了
keyword: git worktree repair prune
快速方法
问题:父级文件夹 KBV3NC 改为 kbscan导致的worktree失败,可以修改worktree路径下的.git文件,立马就好了:
gitdir: H:/XXX/project/keyboard/kbscan/main/.git/worktrees/KBNC-A02
但是这样以来,主git会找不到原来的worktree,还以为是删除了:
$ git worktree list
H:/XXX/project/keyboard/kbscan/main 407c6f9 [main]
H:/XXX/project/keyboard/KBV3NC/KBNC-A02 407c6f9 [dev] prunable
这时,只要对应的worktree的路径下repair下就可以了:
$ git worktree repair
repair: gitdir incorrect: H:/XXX/project/keyboard/kbscan/main/.git/worktrees/KBNC-A02/gitdir
$ git worktree list
H:/XXX/project/keyboard/kbscan/main 407c6f9 [main]
H:/XXX/project/keyboard/kbscan/KBNC-A02 407c6f9 [dev]
why worktree?
假如你当前有个正在开发的feature,而现在反馈有个hoxfix需要紧急处理,但是我当前的feature也没有写完,并且也不想提交,那么你可以:
- git statsh: 将当前工作区的文件保持下来,等完成后再git stash pop即可;
- 但是git stash有个问题,你stash之后为了恢复到hoxfix的版本需要一顿操作,完了之后你还得再回来,很不方便;并且,如果你想双开两个路径的话这个是实现不了的。
多开工作区,但是git记录只有一份。这时可以使用git worktree来实现,简单说就是你可以指定commit记录的任意一个版本复制到一个新的文件夹里,然后你可以在这个文件夹完成你需要的操作;但是由于多开的路径和原路径下的.git实际上是一个,所以你做的修改很方便就能同步,剩下的问题就只有merge的事情了。
在worktree的路径下是有个.git的文件的,而非文件夹,里面记录这自己的来自哪里和是谁
$ cat .git
gitdir: H:/XXX/project/keyboard/KBV3NC/main/.git/worktrees/KBNC-A02
worktree应用场景:
- 我有一个dev分支,平时就是升级下业务逻辑代码,作为我的主路径使用。
- 我还有一个feature分支,但是这里我想修改底层的驱动文件,这里并不是业务逻辑的feature,在完全测试之前我不想发布;这个就可以分离出去。
- 我有一个专机版本的软件,由于配置环境很麻烦或是时间很长,我不想每次都花这个时间;这个可以分离出去。
有了worktree我就可以省去git之间各种切换的问题,牺牲了硬盘空间(其实和你copy一份出来是一样的)得到了便捷。
1.1. worktree prune
这个会删除已经失效的worktree,比如你自己手动把一个worktree的工程文件给删了,在list时就会提示prunable。意思是说当前.git记录里有main这个worktree,但是实际上找不到这个文件夹了,提示你可以清除。
$ git worktree list
H:/XXX/project/keyboard/KBV3NC/XXX-EVAL-V1.1 5ab1178 [feat/f330]
H:/XXX/project/keyboard/KBV7NC/main 407c6f9 [main] prunable
$ git worktree prune
$ git worktree list
H:/XXX/project/keyboard/KBV3NC/XXX-EVAL-V1.1 5ab1178 [feat/f330]
.git\worktrees\main\gitdir
1.2. worktree repair
自己手贱了点,把.git的父级目录名由原来的KBV7的文件夹改成了KBV3,结果进入KBNC-A02路径下发现没有.git提示了:
$ git worktree list
H:/XXX/project/keyboard/KBV3NC/XXX-EVAL-V1.1 5ab1178 [feat/f330]
H:/XXX/project/keyboard/KBV7NC/KBNC-A02 407c6f9 [dev] prunable
H:/XXX/project/keyboard/KBV7NC/main 407c6f9 [main] prunable
$ cd ../KBNC-A02
$ git status
fatal: not a git repository: H:/XXX/project/keyboard/KBV7NC/XXX-EVAL-V1.1/.git/worktrees/KBNC-A02
我一看就知道了,路径不对嘛,改了不就行了。然后我就很聪明地,修改了文件.git\worktrees\main\gitdir内的路径,觉得这下稳了,毕竟list的信息都对了。
$ git worktree list
H:/XXX/project/keyboard/KBV3NC/XXX-EVAL-V1.1 5ab1178 [feat/f330]
H:/XXX/project/keyboard/KBV3NC/KBNC-A02 407c6f9 [dev]
H:/XXX/project/keyboard/KBV3NC/main 407c6f9 [main]
结果,还是不行;实际上,只要再加上一句既可以:
$ git worktree repair
repair: .git file broken: H:/XXX/project/keyboard/KBV3NC/KBNC-A02
$ cd ../KBNC-A02
$ git status
On branch dev
nothing to commit, working tree clean
worktree的路径的文件夹自己重命名后发现没有git的更多相关文章
- 【Java】对文件或文件夹进行重命名
在Java中,对文件或文件夹进行重命名是很简单的,因为Java的File类已经封装好renameTo的方法. 修改文件或者文件夹的名字都使用这个方法.例如如下的程序: import java.io.* ...
- mac文件夹怎么重命名?苹果电脑文件夹重命名快捷键
windows系统下给文件夹重命名相信很多朋友都很熟悉,那么Mac OS系统怎么给文件重命名呢,相信很多刚刚入手Mac OS系统的亲们都会有次疑问,下面小编告诉你Mac OS系统的文件夹到底要怎样才能 ...
- linux复制文件夹、重命名文件夹、删除文件夹
linux中复制命令为cp(即copy缩写),重命名使用mv命令(即move缩写)来实现,删除命令为rm(即remove缩写). 如果操作对象是单个文件,复制和删除以及重命名很简单,如下: cp a. ...
- linux 文件、文件夹的重命名命令
linux中没有重命名命令,一般用mv替代.如将test更名为testsmv test tests隐藏是mv test .test 说到文件的隐藏,linux下文件如果想隐藏起来只要重命名这个文件就可 ...
- python listdir() 中文路径 中文文件夹 乱码 解决方法
python listdir() 中文路径 中文文件夹 乱码 解决方法 listdir(path)返回的结果的编码似乎和我们提供的 path 参数的编码有关: path = 'd:/test' try ...
- 利用Python对文件进行批量重命名
最近几天工作的内容是对40个项目进行考核,每个项目都需要一个考核评分表,已经有了项目的列表. 如果用常规的方法,需要复制40个文件,并逐个修改,不光工作量大,也容易出错,后期修改也不方便. 于是想到了 ...
- 使用bat文件实现批量重命名功能
在生活中我们总会碰到对大量文件进行重命名操作,这时如果一个一个的,选取文件→右键→重命名→选取文件,这样操作势必会浪费大量时间. 现在小编就告诉大家一个使用bat文件(命令行)的方法,快速对文件进行重 ...
- linux下的文件操作——批量重命名
概述:在日常工作中,我们经常需要对一批文件进行重命名操作,例如将所有的jpg文件改成bnp,将名字中的1改成one,等等.文本主要为你讲解如何实现这些操作 1.删除所有的 .bak 后缀: renam ...
- 文件名命工具类(将指定目录下的文件的type类型的文件,进行重命名,命名后的文件将去掉type)
import java.io.File; /** * <b>function:</b> 文件命名工具类 * @author hoojo * @createDate 2012-5 ...
- [转帖]Linux下inotify监控文件夹状态,发生变化后触发rsync同步
Linux下inotify监控文件夹状态,发生变化后触发rsync同步 https://www.cnblogs.com/fjping0606/p/6114123.html 1.安装工具--inotif ...
随机推荐
- CentOS8 安装ansible
# 安装epel扩展源 yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm -y # ...
- 2019徐州区域赛 ACEFM 题解 & pollard-rho & miller-rabin & 求出每个子树的重心 板子
A. Cat 题目大意:你需要在 [L , R] 选取连续的一段,使得这一段的异或和小于给定的数 S. 请求出最长的长度. 做法:我们可以发现 \[(2k) \oplus (2k+1) = 1, (2 ...
- 英特尔 Gaudi 加速辅助生成
随着模型规模的增长,生成式人工智能的实现需要大量的推理资源.这不仅增加了每次生成的成本,而且还增加了用于满足此类请求的功耗.因此,文本生成的推理优化对于降低延迟.基础设施成本以及功耗都至关重要,其可以 ...
- 记录用C#写折半查找算法实现
折半查找算法 前言 最近要考试了,重新回顾一下之前学的算法,今天是折半查找,它的平均比较次数是Log2 n 思想 给定一个有序数组A[0..n-1],和查找值K,返回K在A中的下标. 折半查找需要指定 ...
- arm linux 移植 e2fsprogs
背景 之前在zynq平台下处理系统分区,用到了SPI-FLASH以及EMMC. 根据ZYNQ平台的特性以及产品升级需要,规划了 SPI-FLASH放置BootLoader EMMC中分为2个区,一个F ...
- (要做的事情)利用MNIST识别自己创建的手写数据
(要做的事情)利用MNIST识别自己创建的手写数据 看懂MNIST 进阶教程,了解CNN
- Docker部署php运行环境
编写docker-compose.yml配置文件,使用nginx作为web服务器,转发php的请求. version: "3" services: web: image: ngin ...
- 【SLAM】ORB_SLAM3 初步调试运行详细记录
前言 相关解析及参考: 超详细解读ORB-SLAM3单目初始化(下篇) ORB_SLAM3和之前版本有什么不同?_小白学视觉的技术博客_51CTO博客 orbslam3 官方源码地址:https:// ...
- CF1864C 题解
\(x = 2^k\) 是好做的,每次以 \(2^{k-1}\) 为因数即可. 对于其他情况,考虑每次让 \(x\) 减去其二进制下最低位的 \(1\) 直至变成 \(2^k\). 这种策略下显然每个 ...
- Redis常见的16个使用场景
1.缓存 String类型 例如:热点数据缓存(例如报表.明星出轨),对象缓存.全页缓存.可以提升热点数据的访问数据. 2.数据共享分布式 String 类型,因为 Redis 是分布式的独立服务,可 ...