247

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

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

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

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

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

4

15 回答 15

405

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

于 2012-08-02T09:14:46.243 回答
89
sudo chmod -R ug+w .;

此命令将解决此问题。它授予文件夹的写权限。

于 2016-01-04T09:32:35.003 回答
47

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

于 2015-10-16T21:44:18.840 回答
31

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

sudo chown -R your_login_name /path/to/folder
您可以在 [此处][1] 找到解决方案
于 2017-10-29T17:56:06.500 回答
20
sudo chown -R $USER:$USER .

为我完成了这项工作。

于 2020-04-09T02:46:32.807 回答
14

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

git reset --hard

删除任何挥之不去的文件以清理 git 状态,然后执行以下操作:

git pull

它终于奏效了。

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

于 2018-01-16T15:42:37.603 回答
9

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

于 2014-11-15T21:35:59.223 回答
8

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

于 2016-05-11T15:49:37.137 回答
4
git reset --hard

为我工作

于 2017-10-24T19:40:57.900 回答
3

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

于 2017-07-28T12:58:10.900 回答
3

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

然后执行

git pull 

再次

于 2018-03-09T04:47:33.463 回答
3

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

用一个简单的sudo it can fix the issue

sudo git pull origin master

你让它工作。

于 2020-09-06T07:03:45.373 回答
2

拉动可能会产生局部变化。

添加未跟踪的文件:

混帐添加。

存储更改。

混帐藏匿

删除本地更改。

git 存储下降

使用 sudo 权限拉取

sudo git pull 远程分支

于 2019-05-13T19:15:41.707 回答
2

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

你可能会发现:

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

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

于 2016-08-08T14:41:27.930 回答
0

我带着礼物来了

sudo chown -R $USER:$USER 
于 2021-11-10T21:57:44.873 回答