Git推送错误:无法取消旧链接(权限被拒绝)

rfc*_*484 173 git git-push git-checkout

在远程服务器中,我设置了一个post-receive hook,以便对我的存储库进行git checkout:

#!/bin/sh
GIT_WORK_TREE=/var/www/<website> git checkout -f
Run Code Online (Sandbox Code Playgroud)

但是当我从本地机器推送到服务器中的git存储库时,我收到以下错误消息:

remote: error: unable to unlink old '<file>' (Permission denied)
Run Code Online (Sandbox Code Playgroud)

这出现了很多次,几乎每个文件都有一条错误消息.

但是我有一个README.txt文件,我可以使用git更改,这是它的权限:

-rw-r--r--  1 <serverusername>  <serverusername>  2939 Aug  2 10:58 README.txt
Run Code Online (Sandbox Code Playgroud)

但是具有完全相同的所有者和相同权限的其他文件会给我这个错误.

在另一个网站的另一个本地存储库中,我将本地计算机用户名作为所有者的文件,当我推送到远程服务器时,它尊重文件的远程服务器所有者,并像魅力一样工作.

显然它似乎与权限相关的错误,但我找不到修复它的方法,有什么建议吗?

Jan*_*rek 305

当您必须取消链接文件时,您必须拥有目录的权限'w',在哪个文件中,而不是文件...

  • 确实这就是问题所在,我使用`sudo chmod -R g + w`修复了有罪的文件夹. (58认同)
  • 还要记住,如果您仍然打开文件,也会出现此错误。有同样的错误,这就是为什么我无法推送我的更改。 (2认同)
  • `ls -l` 显示的第一个字符表示文件类型,与权限无关。剩下的九个字符分为三组,每组用三个字符表示一类权限。第一组代表用户类别。第二组代表组类。第三组代表其他类。chmod 中的 `g+w` 赋予组集(`g` 参数)写入权限(`w` 参数) (2认同)

Raj*_*ari 55

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

此命令将解决此问题.它为文件夹提供写入权限.


小智 36

如果您正在使用任何IDE,则问题很可能是某个进程使用了​​该文件.就像你的tomcat可能正在使用该文件一样.尝试识别该特定过程并关闭它.那应该可以解决你的问题.


小智 28

我认为问题可能出在文件夹的所有权上,因此将其设置为当前用户所有权

sudo chown -R your_login_name /path/to/folder
Run Code Online (Sandbox Code Playgroud) 您可以在 [此处][1] 中找到解决方案


wcy*_*cyn 9

我有同样的问题,上面的解决方案都没有为我工作.我删除了有问题的文件夹.然后:

git reset --hard
Run Code Online (Sandbox Code Playgroud)

删除任何延迟文件以清除git状态,然后执行:

git pull
Run Code Online (Sandbox Code Playgroud)

它终于奏效了.

注意:例如,如果文件夹是包含构建文件的公用文件夹,请记住重建文件


BAR*_*ARJ 9

sudo chown -R $USER:$USER .
Run Code Online (Sandbox Code Playgroud)

为我做了这项工作。


kyl*_*nds 6

这是一个老问题,但这可能对 Mac 用户有所帮助。

如果您手动从 Time Machine 复制文件,而不是通过 Time Machine 恢复它们,它将向所有内容添加ACL,这可能会扰乱您的权限。

例如,这篇文章中“如何修复 Mac OS X 文件权限”的部分显示“每个人”都有自定义权限,这把它搞砸了:

错误的权限,来自 http://dreamlight.com/how-to-fix-mac-os-x-file-permissions

您需要从这些目录/文件中删除 ACL。这个超级用户答案进入了它,但这是命令:

sudo chmod -RN .

然后您可以确保您的目录和文件具有适当的权限。我750用于目录和644文件。


cel*_*epo 5

FWIW - 我有一个类似的问题,我不确定这是否缓解了它(超出权限模式):关闭使用该问题的分支的Eclipse.