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

在远程服务器,我有一个post-receive钩子,以便对我的仓库进行git签出:

#!/bin/sh GIT_WORK_TREE=/var/www/<website> git checkout -f 

但是当我从本地机器推到服务器的git仓库时,我得到以下错误信息:

 remote: error: unable to unlink old '<file>' (Permission denied) 

这会出现很多次,几乎每个文件都有一个错误信息。

不过,我有一个README.txt文件,我可以使用git进行更改,下面是它的权限:

 -rw-r--r-- 1 <serverusername> <serverusername> 2939 Aug 2 10:58 README.txt 

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

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

显然这似乎是一个权限相关的错误,但我找不到解决方法,有什么build议吗?

当你不得不取消链接文件,你必须有权限“W”的目录,在哪个文件,而不是文件…

如果您使用任何IDE,最可能的问题是该文件被某个进程使用。 像你的Tomcat可能正在使用该文件。 尝试确定特定的过程并closures它。 这应该可以解决你的问题。

 sudo chmod -R ug+w .; 

这个命令已经解决了我的问题。 它给文件夹写入权限。

FWIW – 我有一个类似的问题,我不知道这是否缓解了它(超出权限mod):closures使用分支与这个问题的Eclipse。

这是一个老问题,但这可能有助于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文件。

还要记得检查根目录本身的权限!

你可能会发现:

 drwxr-xr-x 9 not-you www-data 4096 Aug 8 16:36 ./ -rw-r--r-- 1 you www-data 3012 Aug 8 16:36 README.txt -rw-r--r-- 1 you www-data 3012 Aug 8 16:36 UPDATE.txt 

并popup“权限被拒绝”错误。

我得到这个错误,和其他奇怪的git错误,当我有一个服务器运行(在Intellij)。 停止服务器并重新尝试git命令经常为我修复它。

 git reset --hard 

为我工作

我认为这个问题可能与文件夹的所有权有关,因此将其设置为当前用户所有权

sudo chown -R your_login_name / path / to /文件夹

你可以在这里find解决scheme