WSL上的Git:错误:无法取消链接旧的<file>权限被拒绝

时间:2019-07-09 12:13:03

标签: git file-permissions windows-subsystem-for-linux

我在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>

注意事项:

  • 这不是linux权限问题;我可以从WSL内部编辑文件;只有git命令有问题。
  • 我正在Windows中运行一个Web服务器进程,该进程(大概)正在锁定文件,并且我试图找到一种不涉及停止该进程的解决方案。我可以在Windows和WSL中编辑文件,而无需停止该过程;只有git命令有问题。

如果我可以同时从WSL和Windows编辑文件,为什么git无法取消链接?我该怎么办:

  1. 强制git取消链接文件
  2. 中止无法取消链接文件的git操作

我的Windows完全是最新的,但我没有进入Insider环。

更新:这是运行git checkout的输出的结尾:

strace git co master

1 个答案:

答案 0 :(得分:1)

这是Windows的限制。 Windows默认情况下不允许进程删除正在使用的文件,并且当Git检出文件时,它可能会取消链接其中的一些文件。这在Unix上是完全正常的,它允许您删除正在使用的文件,但在Windows上会引起问题。并发修改通常不是问题。

如果需要能够通过Git删除正在使用的文件,则需要使用在WSL中运行的Clojure和Java版本,您可以在其中成功执行这些操作。另外,您可以尝试将程序存储在WSL侧的主目录中,并使用a \\WSL$\ path在基于Windows的程序中访问它们。这可能会或可能不会。

Git没有提供避免此问题的选项,因为它假定系统提供了合理的POSIX行为,并且没有办法强制执行操作,因为该行为源于操作系统中的故意设计决定。 / p>