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

时间:2012-08-02 09:12:51

标签: git git-push git-checkout

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

#!/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

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

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

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

14 个答案:

答案 0 :(得分:280)

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

答案 1 :(得分:48)

Locale locale = new Locale("your spinner selection code");

此命令可以解决问题。它为文件夹提供写入权限。

答案 2 :(得分:35)

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

答案 3 :(得分:6)

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

git reset --hard

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

git pull

终于奏效了。

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

答案 4 :(得分:5)

FWIW - 我遇到了类似的问题,我不确定这是否会缓解它(超出权限模式):关闭正在使用该分支的Eclipse。

答案 5 :(得分:4)

sudo chown -R $USER:$USER .

是我的工作吗?

答案 6 :(得分:3)

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

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

例如,this article中标有&#34;如何修复Mac OS X文件权限的部分&#34;表明&#34;每个人&#34;拥有自定义权限,这会让所有人感到困惑:

Bad permissions, from http://dreamlight.com/how-to-fix-mac-os-x-file-permissions

您需要从这些目录/文件中删除ACL。 This Super User answer进入它,但这是命令:

sudo chmod -RN .

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

答案 7 :(得分:2)

当我运行服务器时(在Intellij中),我收到此错误以及其他奇怪的git错误。停止服务器并重新尝试git命令经常为我修复它。

答案 8 :(得分:2)

git reset --hard

为我工作

答案 9 :(得分:2)

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

{{1}}
你可以找到解决方案[这里] [1]

答案 10 :(得分:1)

有些文件是写保护的,即使是git也无法覆盖它。更改文件夹权限以允许写入,例如sudo chmod 775 foldername

然后git再拉一次

答案 11 :(得分:0)

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

你可能会发现:

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

和&#39;许可被拒绝&#39;错误会弹出。

答案 12 :(得分:0)

拉动可能已创建本地更改。

添加未跟踪的文件

  

git add。

隐藏更改。

  

git隐藏

丢弃本地更改。

  

git隐藏掉

具有sudo权限拉动

  

sudo git pull远程分支

答案 13 :(得分:0)

检查文件夹的权限后,可以使用744。我在WordPress网站上安装的插件出现问题。该插件已经钩住了我怀疑的玉米工作。

使用简单的sudo it can fix the issue

sudo git pull origin master

您可以使用它。