Files
MemRelay/projects/d5a7f581-c442-4554-87b9-ee723b8b0258/坑:Windows 目录改名被句柄锁死的破解法(句柄跟对象走).md

1.7 KiB
Raw Permalink Blame History

title, type, permalink, stable_id, scope, project_id, memory_type, status, revision, restored_from_commit, created_at, updated_at, tags
title type permalink stable_id scope project_id memory_type status revision restored_from_commit created_at updated_at tags
坑:Windows 目录改名被句柄锁死的破解法(句柄跟对象走) experience main/projects/d5a7f581-c442-4554-87b9-ee723b8b0258/坑-windows-目录改名被句柄锁死的破解法句柄跟对象走 bc21af00-1127-44f8-93b7-aa484a7041c2 project d5a7f581-c442-4554-87b9-ee723b8b0258 experience active 1 6a6a895eaf 2026-09-23T15:10:01.644507+00:00 2026-09-23T15:10:01.644572+00:00
pitfall
windows
git
submodule

现象:git mv 子模块目录报 Permission denied,Windows 下目录树内只要有任何打开的句柄,整树 rename 就会失败(与句柄共享模式无关)。本例是 Cursor IDE 持有子模块内嵌 .git 的目录句柄(.git、refs/remotes/origin)和 pack/idx 文件内存映射。排查:逐层 Rename-Item 二分定位被锁子项;用 Sysinternals handle64.exe(live.sysinternals.com 临时下载,用完删)查持锁进程。破解(无需重启 IDE/杀进程):Windows 句柄跟随对象而非路径,且单个被打开对象若共享 DELETE 可直接 Move-Item——把被锁对象逐个移出目录树(移到 temp),树内无句柄后整树 rename 成功,再把对象移回新位置;全程可逆。另:手动迁移子模块(非 git mv)后需补:.gitmodules 改 path(先 git add .gitmodules 否则 git rm 报 stage 错误)→ git rm --cached 旧路径 → git add 新路径(含 .git 的目录自动成 gitlink,embedded 警告可忽略)→ git submodule sync;内嵌 .git 自包含无需改指针,absorbed 子模块用 git mv 会自动处理。