Git推送错误:无法取消旧链接(权限被拒绝)
在远程服务器,我有一个post-receive钩子,以便对我的仓库进行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
但其他具有完全相同的所有者和相同的权限的文件,给我这个错误。
在另一个网站的另一个本地存储库中,我有我的本地计算机用户名作为所有者的文件,当我推送到远程服务器时,它尊重文件的远程服务器所有者,并像魅力一样工作。
显然这似乎是一个权限相关的错误,但我找不到解决方法,有什么build议吗?
当你不得不取消链接文件,你必须有权限“W”的目录,在哪个文件,而不是文件…
如果您使用任何IDE,最可能的问题是该文件被某个进程使用。 像你的Tomcat可能正在使用该文件。 尝试确定特定的过程并closures它。 这应该可以解决你的问题。
sudo chmod -R ug+w .;
这个命令已经解决了我的问题。 它给文件夹写入权限。
FWIW – 我有一个类似的问题,我不知道这是否缓解了它(超出权限mod):closures使用分支与这个问题的Eclipse。
这是一个老问题,但这可能有助于Mac用户。
如果您手动从Time Machine复制文件,而不是通过Time Machine恢复文件,则会将ACL添加到所有内容,这可能会弄乱您的权限。
例如, 本文中的“如何修复Mac OS X文件权限”部分显示,“所有人”都具有自定义权限,这会将其全部混淆:
您需要从这些目录/文件中删除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
并popup“权限被拒绝”错误。
我得到这个错误,和其他奇怪的git错误,当我有一个服务器运行(在Intellij)。 停止服务器并重新尝试git命令经常为我修复它。
git reset --hard
为我工作
我认为这个问题可能与文件夹的所有权有关,因此将其设置为当前用户所有权
sudo chown -R your_login_name / path / to /文件夹
你可以在这里find解决scheme