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

问题描述 投票:0回答:17

在远程服务器中,我设置了一个接收后挂钩,以便对我的存储库进行 git 签出:

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

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

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

这种情况会出现多次,几乎每个文件都会出现一条错误消息。

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

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

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

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

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

git git-push git-checkout
17个回答
449
投票

当您必须取消链接文件时,您必须拥有目录(文件所在目录)的“w”权限,而不是文件的权限...


110
投票
sudo chmod -R ug+w .;

此命令可以解决该问题。它授予文件夹写入权限。


71
投票
sudo chown -R $USER:$USER .

为我完成了这项工作。


52
投票

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


40
投票

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

sudo chown -R your_login_name /path/to/folder
您可以在[此处][1]找到解决方案

19
投票

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

git reset --hard

删除所有残留文件以清理 git 状态,然后执行以下操作:

git pull

终于成功了。

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


12
投票

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


9
投票

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

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

例如,这篇文章中的“如何修复 Mac OS X 文件权限”部分显示“每个人”都有自定义权限,这让一切变得混乱:

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

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

sudo chmod -RN .

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

750
表示目录,使用
644
表示文件。


4
投票

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

您可能会发现:

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

并且会弹出“权限被拒绝”错误。


4
投票

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

然后执行

git pull 

再次


3
投票

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


3
投票
git reset --hard

为我工作


3
投票

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

添加您的未跟踪文件:

git 添加。

隐藏更改。

git 存储

删除本地更改。

git 隐藏掉落

使用 sudo 权限拉取

sudo git pull 远程分支


3
投票

检查文件夹的权限后,744 没问题。我的 WordPress 网站上安装的 plugin 遇到了问题。该插件已经钩住了我怀疑的玉米工作。

用一个简单的

sudo it can fix the issue

sudo git pull origin master

你已经可以使用了。


3
投票

就我而言,我必须向该文件夹的所有组成员授予读取、写入和执行权限。 这是因为 Git 用户是组成员而不是用户。

sudo chmod -R g=rwx <folder>

2
投票

确保相关文件没有在其他应用程序中打开(我是用 Excel 打开的)!


0
投票

Windows 上最简单的方法:

1)进入任务管理器

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

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

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

问题已解决。

© www.soinside.com 2019 - 2024. All rights reserved.