首页 > 其他分享 > worktree的路径的文件夹自己重命名后发现没有git

worktree的路径的文件夹自己重命名后发现没有git

时间:2022-08-20 14:25:35浏览次数:64  
标签:重命名 git worktree KND project keyboard main

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:/KND/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:/KND/project/keyboard/KBV3NC/GD32E230C-EVAL-V1.1  5ab1178 [feat/f330]
H:/KND/project/keyboard/KBV7NC/main                 407c6f9 [main] prunable

git worktree prune
$ git worktree list
H:/KND/project/keyboard/KBV3NC/GD32E230C-EVAL-V1.1  5ab1178 [feat/f330]

.git\worktrees\main\gitdir

1.2. worktree repair

自己手贱了点,把.git的父级目录名由原来的KBV7的文件夹改成了KBV3,结果进入KBNC-A02路径下发现没有.git提示了:

$ git worktree list
H:/KND/project/keyboard/KBV3NC/GD32E230C-EVAL-V1.1  5ab1178 [feat/f330]
H:/KND/project/keyboard/KBV7NC/KBNC-A02             407c6f9 [dev] prunable
H:/KND/project/keyboard/KBV7NC/main                 407c6f9 [main] prunable

$ cd ../KBNC-A02

$ git status
fatal: not a git repository: H:/KND/project/keyboard/KBV7NC/GD32E230C-EVAL-V1.1/.git/worktrees/KBNC-A02

我一看就知道了,路径不对嘛,改了不就行了。然后我就很聪明地,修改了文件.git\worktrees\main\gitdir内的路径,觉得这下稳了,毕竟list的信息都对了。

$ git worktree list
H:/KND/project/keyboard/KBV3NC/GD32E230C-EVAL-V1.1  5ab1178 [feat/f330]
H:/KND/project/keyboard/KBV3NC/KBNC-A02             407c6f9 [dev]
H:/KND/project/keyboard/KBV3NC/main                 407c6f9 [main]

结果,还是不行;实际上,只要再加上一句既可以:

$ git worktree repair
repair: .git file broken: H:/KND/project/keyboard/KBV3NC/KBNC-A02

$ cd ../KBNC-A02

$ git status
On branch dev
nothing to commit, working tree clean

标签:重命名,git,worktree,KND,project,keyboard,main
From: https://www.cnblogs.com/qiyuexin/p/16607627.html

相关文章

  • Git在使用过程中遇到的一些问题
    git默认对文件中的大小写不敏感。方案1:通过配置git来达到识别文件大小写的问题。命令如下:gitconfigcore.ignorcecasefalse缺点:每个仓库都需要修改。方案2:1.先删......
  • Git常用指令
    团队中高频使用的指令注册内网用户项目管理员拉进项目获取权限后,gitclone'url'项目到本地创建自己的项目分支gitbranch'分支名'开始编码gitclone默认下载所......
  • 解决无法访问GitHub
    一、获取IP地址可以直接通过网站查询域名github.com的IP地址,无论哪种方法一定得是通过自己本机查到的IP,网上别人查到的IP你不一定有用。https://www.ipaddress.co......
  • TortoiseGit 图标不显示
    TortoiseGit图标不显示谁在和我的TortoiseGit争夺图片,我就删除谁计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayId......
  • gitignore的相关语法
    空行会被忽略匹配是区分大小写的,如:/abc和/Abc含义不同#开头是注释,会被忽略*表示0-n个字符**两个星含义是子目录子子目录等多层匹配?匹配1个字符(......
  • GIt 冲突解决
    1.gitmerge冲突现象andrew@b-d51qlvdl-2310test1%gitmergetestAuto-mergingREADME.en.mdCONFLICT(content):MergeconflictinREADME.en.mdAutomaticmerg......
  • Jenkins+gitlab+docker+harbor容器化自动部署详细流程
    环境:Linux版本:Centos7一、更新源:yumupdate二、安装docker:yuminstalldocker-y启动docker:systemctlstartdocker三、.安装gitlab1.docker......
  • Git问题整理
    删除GitHub所有Commit记录git checkout --orphan latest_branchgit add -Agit commit -am "."git branch -D mastergit branch -m mastergit remote......
  • git rebase之abort,continue,skip
     gitrebase--abort会放弃合并,回到rebase操作之前的状态,之前的提交的不会丢gitrebase--skip会将引起冲突的commit丢弃掉gitrebase--continue常用选择合并冲突......
  • git的使用
    1.下载并配置gitconfig--globaluser.name"用户名"gitconfig--globaluser.email"邮箱"2.创建gitinit3.移到暂存区gitadd.4.提交到本地gitcommit-m'提......