我在WSL中使用git。我一直在开发一个使用Web服务器的项目,该项目已在Windows的IDE中的进程中运行。当我尝试拉动,切换分支,隐藏和类似操作时,通常会收到以下消息:
error: unable to unlink old '<filename>': Permission denied
该文件始终是包含启动Web服务器的代码的文件。
我可以在IDE中编辑文件,也可以使用nano
在WSL(运行git命令的地方)中的终端或通过{{ 1}}到文件中。在WSL中,我对包含文件和文件本身的目录具有linux权限。停止运行Web服务器的进程可以使我毫无困难地执行git命令,但是启动Web服务器需要很长时间,这就是为什么我想找到一种解决方法。
发生此问题时,echo
命令(或其他命令)使我的本地结帐处于令人讨厌的状态,其中某些文件已更改,而其他文件未更改,这比根本不运行该命令更糟糕。 / p>
注意事项:
如果我可以同时从WSL和Windows编辑文件,为什么git无法取消链接?我该怎么办:
我的Windows完全是最新的,但我没有进入Insider环。
更新:这是运行git checkout
的输出的结尾:
strace git co master
答案 0 :(得分:1)
这是Windows的限制。 Windows默认情况下不允许进程删除正在使用的文件,并且当Git检出文件时,它可能会取消链接其中的一些文件。这在Unix上是完全正常的,它允许您删除正在使用的文件,但在Windows上会引起问题。并发修改通常不是问题。
如果需要能够通过Git删除正在使用的文件,则需要使用在WSL中运行的Clojure和Java版本,您可以在其中成功执行这些操作。另外,您可以尝试将程序存储在WSL侧的主目录中,并使用a \\WSL$\
path在基于Windows的程序中访问它们。这可能会或可能不会。
Git没有提供避免此问题的选项,因为它假定系统提供了合理的POSIX行为,并且没有办法强制执行操作,因为该行为源于操作系统中的故意设计决定。 / p>