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的更多相关文章

  1. 【Java】对文件或文件夹进行重命名

    在Java中,对文件或文件夹进行重命名是很简单的,因为Java的File类已经封装好renameTo的方法. 修改文件或者文件夹的名字都使用这个方法.例如如下的程序: import java.io.* ...

  2. mac文件夹怎么重命名?苹果电脑文件夹重命名快捷键

    windows系统下给文件夹重命名相信很多朋友都很熟悉,那么Mac OS系统怎么给文件重命名呢,相信很多刚刚入手Mac OS系统的亲们都会有次疑问,下面小编告诉你Mac OS系统的文件夹到底要怎样才能 ...

  3. linux复制文件夹、重命名文件夹、删除文件夹

    linux中复制命令为cp(即copy缩写),重命名使用mv命令(即move缩写)来实现,删除命令为rm(即remove缩写). 如果操作对象是单个文件,复制和删除以及重命名很简单,如下: cp a. ...

  4. linux 文件、文件夹的重命名命令

    linux中没有重命名命令,一般用mv替代.如将test更名为testsmv test tests隐藏是mv test .test 说到文件的隐藏,linux下文件如果想隐藏起来只要重命名这个文件就可 ...

  5. python listdir() 中文路径 中文文件夹 乱码 解决方法

    python listdir() 中文路径 中文文件夹 乱码 解决方法 listdir(path)返回的结果的编码似乎和我们提供的 path 参数的编码有关: path = 'd:/test' try ...

  6. 利用Python对文件进行批量重命名

    最近几天工作的内容是对40个项目进行考核,每个项目都需要一个考核评分表,已经有了项目的列表. 如果用常规的方法,需要复制40个文件,并逐个修改,不光工作量大,也容易出错,后期修改也不方便. 于是想到了 ...

  7. 使用bat文件实现批量重命名功能

    在生活中我们总会碰到对大量文件进行重命名操作,这时如果一个一个的,选取文件→右键→重命名→选取文件,这样操作势必会浪费大量时间. 现在小编就告诉大家一个使用bat文件(命令行)的方法,快速对文件进行重 ...

  8. linux下的文件操作——批量重命名

    概述:在日常工作中,我们经常需要对一批文件进行重命名操作,例如将所有的jpg文件改成bnp,将名字中的1改成one,等等.文本主要为你讲解如何实现这些操作 1.删除所有的 .bak 后缀: renam ...

  9. 文件名命工具类(将指定目录下的文件的type类型的文件,进行重命名,命名后的文件将去掉type)

    import java.io.File; /** * <b>function:</b> 文件命名工具类 * @author hoojo * @createDate 2012-5 ...

  10. [转帖]Linux下inotify监控文件夹状态,发生变化后触发rsync同步

    Linux下inotify监控文件夹状态,发生变化后触发rsync同步 https://www.cnblogs.com/fjping0606/p/6114123.html 1.安装工具--inotif ...

随机推荐

  1. mac brew install Error: No available formula with the name “*“的解决办法

    背景 在mac上使用brew安装软件发生错误 解决办法 执行以下命令即可 rm -rf /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core ...

  2. 使用nc进行tcp测速

    # server nc -l IP PORT > /dev/null eg: nc -l 192.168.144.1 8080 > /dev/null # client bs单位块大小 c ...

  3. Gmsh 和 FiPy 求解稳态圆柱绕流

    本项目的源码保存在 github 仓库 https://github.com/cjyyx/CFD_Learning/tree/main/CFD软件学习/FiPy/cylinder.如果下载整个目录,可 ...

  4. 五个节点的hadoop集群--主要配置文件

    五个节点:配置文件解析:hadoop01               NameNode .DataNode.NodeManagerhadoop02 ResourceManager hadoop03 D ...

  5. Taro 滚动切换tab页

    import React, { Component } from 'react' import { View, Text, ScrollView } from '@tarojs/components' ...

  6. 如何将自己的网站从 HTTP 的转换为 HTTPS 的

    1. 获取 SSL/TLS 证书 首先,你需要获得一个 SSL/TLS 证书.你可以从以下来源之一获取证书: 免费证书: Let's Encrypt:一个免费的.自动化的证书颁发机构(CA),广泛使用 ...

  7. windows10 iis 环境下部署 asp.net core 应用程序的步骤

    1.运行powershell,在运行窗口中输入:powershell,点回车,如下图: 2.安装choco,在打开的powershell窗口中输入:Set-ExecutionPolicy Bypass ...

  8. 【workerman】uniapp+thinkPHP5使用GatewayWorker实现实时通讯

    前言 之前公司需要一个内部的通讯软件,就叫我做一个.通讯软件嘛,就离不开通讯了,然后我就想到了长连接.这里本人用的是GatewayWorker框架. 什么是GatewayWorker框架? Gatew ...

  9. Nginx负载配置

    目录 Nginx 负载均衡笔记 1. 概述 1.1 Nginx 简介 1.2 负载均衡概述 2. 四层负载均衡(传输层) 2.1 工作原理 2.2 特点 2.3 优缺点 优点 缺点 2.4 示例场景 ...

  10. CvT:微软提出结合CNN的ViT架构 | 2021 arxiv

    CvT将Transformer与CNN在图像识别任务中的优势相结合,从CNN中借鉴了多阶段的层级结构设计,同时引入了Convolutional Token Embedding和Convolutiona ...