WSL Ubuntu 发行版 | 如何解决克隆存储库上的“不允许操作”

Dim*_*fst 66 git clone chmod windows-subsystem-for-linux

我正在运行 Ubuntu 18.04,作为 Windows 的子系统。我在多台 PC 上做过这个,从来没有遇到过这个问题。我试着去git clone <repo>,我得到了这个:

Cloning into '<repo>'...
error: chmod on /mnt/c/Users/Efsta/Code/<repo>/.git/config.lock failed: Operation not permitted
fatal: could not set 'core.filemode' to 'false'
Run Code Online (Sandbox Code Playgroud)

我尝试了以下方法:

  1. ? git config core.fileMode false,这个结果 fatal: not in a git directory

  2. ? git config --global core.filemode false

  3. ? git config --add --global core.filemode false

似乎没有任何效果。我已经在这里尝试了几个答案,但 WSL 似乎有点棘手。任何人都知道如何解决这个问题?

我也尝试了这个问题中的所有内容:https : //stackoverflow.com/questions/1580596/how-do-i-make-git-ignore-file-mode-chmod-changes,似乎没有任何效果。

小智 102

我遇到过同样的问题。尝试这个:

sudo umount /mnt/c
sudo mount -t drvfs C: /mnt/c -o metadata
Run Code Online (Sandbox Code Playgroud)

将驱动器号更改为您遇到问题的任何驱动器号。

  • 应该是公认的答案。 (6认同)
  • 为我工作。当 MS 自动安装 Windows 位置时,是否有某种原因没有这样做? (5认同)
  • 请注意,这在构建 17063 之后可用:https://docs.microsoft.com/en-us/windows/wsl/release-notes#build-17063 (5认同)
  • 命令成功了,但这并没有改变我的问题。当 git 尝试 chmod .git/config.lock 时,我仍然看到“不允许操作”。 (2认同)

小智 60

您可以使用元数据选项在 WSL 下自动挂载 Windows 驱动器,该选项允许应用程序(如 git)使用 chmod 并修复此问题。

编辑/etc/wsl.conf(如果它不存在则创建它)。添加以下内容:

[automount]
options = "metadata"
Run Code Online (Sandbox Code Playgroud)

然后:

  • 重新启动 Windows
  • 退出任何 WSL 会话,wsl --shutdown从 PowerShell 或 CMD运行,然后再次启动 WSL
  • 退出你唯一的会话,用 终止它wsl --terminate <distroName>,然后再次启动它,

然后再也不用担心了。

  • 而不是重新启动,使用 WSL 2,您可以退出所有 WSL 2 shell,然后从 powershell 运行`wsl --shutdown`。当你启动一个新的 WSL shell 时,它会自动使用你的新配置再次启动底层 VM。 (6认同)
  • 完成此操作后我必须重新启动计算机。 (2认同)

Tho*_*ard 31

/mnt/c/Users/...位于 Windows NTFS 分区本身上,而不是在 WSL 的ext4格式化系统中。因此,您必须像对待实际 Ubuntu 安装中 U 盘上的 NTFS 分区一样对待它,并接受 NTFS 的限制。

NTFS 分区不支持chmod或类似的 Linux 权限命令,并且与不出错但不进行任何权限更改的实际 Ubuntu 安装不同,WSL 不会将此信息中继回给您,它只是如您在此处看到的那样出错.

由于 Linux 权限架构并且无法正常工作,您无法对WSL 中git clone/mnt/c/...空间进行理智的chmod处理。这是 WSL 当前形式的一个限制。

  • 这个答案在撰写时可能是准确的,但现在已经不准确了。我一直将存储库从 WSL 克隆到 /mnt/c/ 中,没有任何问题,与克隆到 ~/. 请参阅 Wojtek 的回答。 (7认同)
  • 好的,让我确认一些事情。微软说,我应该在 Windows 中用 WSL 开发,这样我就可以在 WSL 和 Windows 端修改它们。所以,到目前为止,在我所有的其他安装中,我都做了同样的事情。如果我们假设你说的是正确的,你会推荐什么作为我的问题的解决方案? (3认同)

小智 7

我遇到了同样的问题。我的解决方案是在默认的 WSL 位置 git clone 我的 repo(它可以工作),并使用 Visual Studio Code 远程访问我的 WSL 的 repos。这样你就不必使用 /mnt/c 了。

链接:https : //code.visualstudio.com/docs/remote/wsl