在Crywin、MSYS或Git Bash中使用mv命令时提示“Permission denied”

上下文

我在Git Bash(使用的环境是MSYS2)中尝试移动一个git仓库目录,但是只移动了一部分,并提示Permission denied

一开始我以为是git仓库再创建过程中产生了一些特殊权限文件。我就试着先用文件管理器看了一下,发现有部分是只读状态,我就递归执行取消只读。 但是又突然发现属性执行窗口下的页面存储空间还在不断增长,我想可能有链接导致Windows资源管理器无法处理,就用停止执行并使用chmod +w -c -R dir去执行,然后发现被修改权限的都是.git/objects/pack/中的*.idx*.pack,总感觉不对劲。因为,其实是由一部分移动成功的,如果是因为只读,那也不可能另一部分都没有问题。果然执行完了也还是不行。尝试换用管理员权限启动Git Bash,也不能执行移动。我本来都要调用chmod试试了。结果查到了一个有用的答案

解释

通常用Windows的用户在自己电脑上应该是很少遇到Permission denied,有也能用管理员权限解决。 那么什么情况下管理员权限解决不了呢。那很又很可能是管理员(你)正在占用目录或目录中的东西。

解决方法

检查文件占用。

  1. 检查打开的文件资源管理器中是否有占用目标目录或目标目录的子目录或文件的。如果有,就关闭它。

  2. 打开资源监视器(你可以在任务管理器的第二个标签页(在Windows10中叫性能(Windows7及更低版本中好像是叫资源)然后往下看就能找到)),切换到CPU标签页,在关联的句柄中搜索目标目录(注意最好不要带分隔符,只要一个目录名,不然可能会出现/\不匹配的情况)。如果搜到的句柄名称确实有目标目录,那么就尝试关闭相关进程或者直接杀死它们。

另外,为了避免出现问题,最后使用find . -wholename "*/.git/objects/pack/*" -exec chmod -w -c {} \;还原了原有的只读权限。


原文 2023年1月1日

posted @ 2024-08-03 16:44  Orange233  阅读(15)  评论(0编辑  收藏  举报