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


190

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

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

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

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

Answers:


335

当必须取消链接文件时,必须具有目录“ w”的权限,该目录位于文件而不是目录中...


65
确实这就是问题所在,我使用sudo chmod -R g+w有罪文件夹将其修复。
rfc1484

1
天哪,谢谢。认为文件上的权限是正确的,这很恼火。有道理的是,更新实际上更像是mv操作,而不仅仅是覆盖。
doublejosh 2012年

1
更改目录权限确实对我有用(谢谢!),但这很奇怪,因为我可以通过sftp手动覆盖有问题的文件而没有任何麻烦。奇怪的是,当git尝试做同样的事情时,它做不到。
乔纳森·斯塔克

1
另外请记住,如果仍然打开文件,也会出现此错误。有同样的错误,这就是为什么我没能推在我的变化。
马蒂亚斯

1
ls -l显示屏的第一个字符表示文件类型,与权限无关。其余九个字符分为三组,每组代表三个类的权限。第一组代表用户类别。第二组代表组类别。第三组代表其他类。的g+w输入chmod给出了组集合(该g参数)允许写(的w参数)
rfc1484



12

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

git reset --hard

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

git pull

终于成功了。

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


谢谢,没有其他办法对我有用,删除它似乎是唯一的选择。
math0ne

就我而言,该问题文件夹为.git
Tushar Kathuria


7

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


同样,当在Excel中打开版本控制的CSV文件时,我也收到了此错误。只需关闭Excel就可以解决它。Windows上的其他应用程序也可能如此,这可能取决于程序在编辑过程中如何将文件标记为打开状态。
卡雷尔

3

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


2

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



2
sudo chown -R $USER:$USER .

为我做了工作。


1

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

然后再git拉


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

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


0

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

添加未跟踪的文件:

git添加

藏匿变化。

git stash

删除本地更改。

git藏起来

以sudo权限拉

sudo git pull远程分支


这都是关于本地文件的许可,与git无关,我刚刚使用sudo运行命令,并且它起作用了,因此不需要所有这些步骤
raviramani
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.