[英]Git on WSL: error: unable to unlink old <file> Permission denied
我在WSL中使用git。 我一直在开发一个使用Web服务器的项目,该项目已在Windows的IDE中的进程中运行。 当我尝试拉动,切换分支,隐藏等时,经常会收到以下消息:
error: unable to unlink old '<filename>': Permission denied
该文件始终是包含启动Web服务器的代码的文件。
我可以在IDE中编辑该文件,也可以使用nano
或将echo
文本管道化到WSL(运行git命令的地方)中的终端来编辑该文件。 在WSL中,我对包含文件和文件本身的目录具有linux权限。 停止运行Web服务器的进程可以使我毫无困难地执行git命令,但是启动Web服务器需要花费很长时间,因此这就是我想找到解决办法的原因。
发生此问题时, git checkout
命令(或其他命令)使我的本地结帐处于令人讨厌的状态,其中某些文件已更改,而其他文件未更改,这比根本不运行命令更糟糕。
注意事项:
如果我可以同时从WSL和Windows编辑文件,为什么git无法取消链接? 我怎么可以:
我的Windows完全是最新的,但我没有进入Insider环。
更新:这是运行strace git co master
的输出的结尾:
wait4(4973, error: unable to unlink old 'signal/dev/dev.clj': Permission denied
error: unable to unlink old 'signal/src/clj/signal/lot.clj': Permission denied
error: unable to unlink old 'signal/src/clj/signal/web.clj': Permission denied
M signal/dev/dev.clj
M signal/src/clj/signal/lot.clj
M signal/src/clj/signal/web.clj
Switched to branch 'master'
Your branch is up to date with 'origin/master'.
[{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, NULL) = 4973
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=4973, si_uid=1000, si_status=0, si_utime=0, si_stime=0} ---
exit_group(0) = ?
+++ exited with 0 +++
这是Windows的限制。 Windows默认情况下不允许进程删除正在使用的文件,并且当Git检出文件时,它可能会取消链接其中的一些文件。 这在Unix上是完全正常的,它允许您删除正在使用的文件,但在Windows上会引起问题。 并发修改通常不是问题。
如果您需要能够通过Git删除正在使用的文件,则需要使用在WSL中运行的Clojure和Java版本,您可以在其中成功执行这些操作。 另外,您可以尝试将程序存储在WSL侧的主目录中,并使用\\\\WSL$\\
路径在基于Windows的程序中访问它们; 这可能会或可能不会。
Git没有提供避免此问题的选项,因为它假定系统提供了合理的POSIX行为,并且没有强制执行操作的方法,因为该行为源于操作系统中的故意设计决策。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.