在一个Vagrant框中的git pull之后随机“无法取消链接旧的'<file>'(Permission denied)”

时间:2017-03-03 14:03:24

标签: git macos vagrant virtualbox homestead

我正在使用预先打包re.fullmatch()的Vagrant盒子工作,有时在git checkoutunable to unlink old '<file>' (Permission denied) 之后,我得到了

git pull

重启我的盒子后,我可以正常拉或结账。我也在本地试过{{1}}并且效果很好。

设定:

  • Mac OS Sierra
  • Virtual Box 5.1.14
  • Vagrant 1.9.1
  • Homestead 5.0

有这个问题的人吗?

1 个答案:

答案 0 :(得分:12)

看起来它是macOS的错误(可能是 El Capitan但在Sierra确认)和/或NFS。

请参阅这些流浪问题:

大多数人发现它似乎与文件系统缓存问题有关。

解决方案High Sierra(2017-11-21)

confirmed by JF Bibeau升级至 High Sierra 10.13.2 Beta 2

  

升级到High Sierra 10.13.2 Beta 2,删除了我的cronjob,它会定期执行ls -laR作为解决方法,[...]

     

我很高兴地报告说,在使用High Sierra的近两周内我还没有看到这一点。它完全固定了!

请注意,与incorrect listing of files on the guest machine相关的High Sierra似乎出现了一个新但不同的问题。

可能的解决方法

如果无法升级到High Sierra,可以采用以下几种解决方法。

更新Vagrant和Virtualbox

如果可能,请更新两者,尽管有些人提到降级有帮助。

主机上的递归列表(简易解决方法)

在主机上运行以下 会刷新文件系统缓存:

ls -alR [synced_directory] > /dev/null

或打开同步目录的获取信息菜单似乎暂时有效。

有些人每隔5分钟做一次cron工作,所以他们从来没有遇到过这个问题,即使它不是一个明确的解决方案。

Someone pointed out仅运行目录的隐藏列表具有相同的效果且更快

find [synced_directory] -type d  > /dev/null

禁用NFS lookupcache

提到的问题中的comment

  

禁用NFS lookupcache似乎有效,但性能却是如此   难以承受。

更改同步目录的权限

在主机上,授予对所有人的读写权限。它似乎暂时起作用,可能与开启获取信息菜单相同的缓存原因有效。

不使用NFS

config.vm.synced_folder "./host", "/vagrant-dir", :mount_options => ["dmode=777", "fmode=777"]

但这有很大的性能下降。

使用vagrant-sshfs

这是一个vagrant插件,允许使用SSHFS挂载目录。虽然从回购协议本身列出的缺点:

  

性能比像NFS这样的实现更糟糕

降级为El Capitan

Some people提到他们没有这个特定的&#34;取消链接&#34; El Capitan的问题。所以降级将是最后的手段解决方案,以避免处理它。

某些已注册的Apple开发者已在bugreport.apple.com#28927426#33043401)上报告了该问题,但该信息是私有的。

Apple responded并关闭原始错误报告,说:

  

此错误报告中报告的问题已得到修复,但High Sierra问题仅针对APFS而不是同一问题。请为该问题提交一份新的小册子(原文如此)。谢谢。我们现在正在关闭此错误报告。