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

在远程服务器中,我设置了一个接收后的钩子,以便对我的存储库进行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

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

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

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

276374 次浏览

当你必须解除文件链接时,你必须对目录有权限'w',其中文件是,而不是文件…

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

如果您正在使用任何IDE,最有可能的问题是该文件已被某些进程使用。比如你的tomcat可能正在使用这个文件。尝试识别特定的进程并关闭它。这应该能解决你的问题。

sudo chmod -R ug+w .;

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

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

如果你手动从时间机器复制文件,而不是通过时间机器恢复它们,它会给所有东西添加acl,这可能会扰乱你的权限。

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

Bad permissions, from 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

然后会弹出'permission denied'错误。

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

git reset --hard

为我工作

我认为问题可能是文件夹的所有权,所以将其设置为当前用户的所有权

sudo chown -R your_login_name /path/to/folder
你可以在这里找到答案

我也遇到了同样的问题,但上面的解决方案都不适合我。我删除了有问题的文件夹。然后:

git reset --hard

删除任何残留文件以清理git状态,然后做:

git pull

它终于起作用了。

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

有些文件是写保护的,即使是git也不能重写它。修改文件夹权限以允许写入,例如sudo chmod 775 foldername

然后执行

git pull

再一次

拉扯可能会造成局部变化。

添加您的未跟踪文件:

Git添加。

储备的变化。

git藏

删除本地更改。

Git藏匿点

在sudo的允许下拉

须藤git拉远程分支

sudo chown -R $USER:$USER .

帮我完成了任务。

检查文件夹权限后,744是ok的。我有一个问题与插件安装在我的WordPress网站。插件已经钩住了我怀疑的玉米作业。

简单的sudo it can fix the issue

sudo git pull origin master

你让它工作了。

在我的例子中,我必须为文件夹上的所有组成员授予读、写和执行权限。这是因为Git用户是组成员,而不是所有者。

sudo chmod -R g=rwx <folder>

在windows上最简单的方法:

1)进入任务管理器

2)结束文件资源管理器任务

3)在任务管理器中,点击“文件”;选项卡,然后点击“运行新任务”;

4)在弹出窗口中写入explorer.exe

问题解决。

确保有问题的文件没有在其他应用程序中打开(我用Excel有这个)!