Git Checkout警告:无法取消链接文件,权限被拒绝

Par*_*gon 103 git

我知道有关git的问题与"无法取消链接"警告有关,但我无法使用它们.

主要区别在于,当我没有以任何方式处理子模块时(我之前从未处理过它们)发生了这种情况.我创建了一个名为"upgrade"的分支,删除了我的旧框架文件,并复制了新的框架文件.我使用git add -A,然后提交了所有内容.当我尝试检出trunk分支时,它响应了以下错误:

warning: unable to unlink requirements/views/sk/index.php: Permission denied
warning: unable to unlink requirements/views/sv/index.php: Permission denied
warning: unable to unlink requirements/views/zh/index.php: Permission denied
warning: unable to unlink requirements/views/zh_cn/index.php: Permission denied
warning: unable to unlink requirements/views/zh_tw/index.php: Permission denied
Run Code Online (Sandbox Code Playgroud)

...等等.有数百个.

起初我认为这只是一个权限问题,因此我以递归方式向整个需求目录添加了组写权限,但没有任何更改.

编辑:正如下面的答案所示,我尝试做同样的事情,但其他一切都关闭了.我没有比以前更幸运了.

这个问题特别令人虚弱,因为我无法进入后备箱以恢复正常发展.

Eli*_*ynn 96

在我第一次遇到此错误时,我的用户有权"写"到文件而不是包含目录.检查包含该文件的目录的权限.

  • 哦,太有趣了,我今天刚刚遇到这个答案,然后我意识到这是我自己的!尽管如此,它再次奏效! (89认同)

Von*_*onC 79

当进程没有释放那些文件的句柄时,我通常会看到这种错误.

确保没有任何内容正在运行,然后再次尝试结帐.

注意:它也可能与Git的安装方式有关(在Windows上,如果安装了msysgit,UAC可能会产生问题,C:\Program或者C:\Program Files参见" msysgit - sh.exe - fork:Permission denied - Vista 64 bit "和评论2问题437)

注意:如下图所示,问题的常见原因是目录上的权限问题(错误的所有者),不一定是无法取消链接的文件.

  • @Paragon:即使在unix上,你也可以解决问题.否则,这应该是某种许可问题.你应该能够强制结账.`git checkout -f master` (3认同)
  • git checkout -f master为我工作. (3认同)
  • 在我的情况下+1是与活动VM共享的文件夹,禁止丢弃主机系统上的git中的文件.开车送我疯了,谢谢你的提示! (2认同)

rtc*_*ner 30

在这种情况下,"取消链接"实质上意味着"删除文件".

这个错误不是由git本身引起的.在命令行或文件资源管理器中手动删除这些文件时应该有类似的错误.

  • 在我第一次遇到此错误时,我的用户有权"写"到文件,但包含的目录没有. (18认同)
  • 在我的情况下,我发现有问题的文件被另一个应用程序锁定.关闭应用程序会释放文件并允许结帐继续. (4认同)
  • @Elijah:谢谢!这就是我的意思. (3认同)

Rob*_*ine 23

我在drupal 7中遇到了default-settings.php文件的问题.在这种情况下,我无法删除它或像@rtconner所说的那样恢复它.我没有使用此文件的应用程序或任何内容,最终导致权限错误.

我添加chmod 777 *到该文件夹​​,然后我能够还原它没有问题.

  • 虽然你可能不想在任何文件夹上使用`777`.这确实解决了我的问题,但在解决之后我很快将其恢复为默认值.谢谢! (2认同)

Vin*_*uan 23

您没有访问权限,可能是因为您不是所有者.

通过将所有者更改为自己来修复:

sudo chown -R your_login_name /path/to/folder
Run Code Online (Sandbox Code Playgroud)

  • 在我的本地开发机器上,有问题的文件最初是由我的本地apache服务器创建的,因此由www-data用户拥有.一旦我将它们放到我自己的帐户中,一切都正常工作."权限被拒绝"是真正的问题."无法解开"只是一只红鲱鱼. (2认同)

Raj*_*ari 12

您可以更改写入权限以完成它.

sudo chmod -R ug+w . 
Run Code Online (Sandbox Code Playgroud)

此命令将为'w'当前目录中的所有文件夹授予权限.


Lea*_* ES 6

每当在我的OS X机器上运行"git repack"或"git gc"时,我遇到了这个问题,即使在运行带有管理员权限的git时,我终于在遇到这个页面后解决了这个问题:http://hints.macworld.com /comment.php?mode=view&cid=1734

修复是打开一个终端,转到你的git repo,cd进入.git文件夹,然后执行:

chflags -R nouchg *
Run Code Online (Sandbox Code Playgroud)

如果那是问题,那么之后,你的git命令将正常工作.


duk*_*ave 5

这也可能发生在:

  1. 您在Docker 容器内运行了一个进程,并且:

  2. 该过程生成了一些文件,并且:

  3. 文件的目的地作为卷挂载在 Docker 主机上,并且:

  4. 您正在gitDocker 主机上运行。


如果是这种情况,请暂存您希望提交并运行的文件:

git diff --name-only --cached | xargs ls -l 
Run Code Online (Sandbox Code Playgroud)

符合上述条件的文件将带有前缀:

-rw-r--r-- 1 root root ...
Run Code Online (Sandbox Code Playgroud)

它们归所有者所有root且不可写,这不好。要修复该运行:

 git diff --name-only --cached | xargs -i sh -c 'sudo chown $USER:$USER {}; chmod +w {}'
Run Code Online (Sandbox Code Playgroud)

更简洁的解决方案可能是使用该--user选项,请参阅DockerDocker compose 的this