Git出现“无法取消链接旧文件(权限被拒绝)”错误,但更新权限无效。

5
我在一个分支(Branch-A)上工作,并提交了我的代码并推送了我的更改。然后,我检出了一个新的分支(Branch-B),做了一些工作,但发现我在Branch-A中工作的同一文件上得到了一些更改。
我运行了git checkout -- /file.php来还原更改,但是得到了以下错误信息:

error: unable to unlink old 'file.php' (Permission denied)

通过谷歌搜索此问题,我发现很多StackOverflow答案都说要更改该文件的权限,但我已经尝试过了。
chmod ug+w file.php

并且

chmod 777 file.php

不过,我仍然遇到相同的问题,出现相同的错误信息。

有人知道这是什么问题或我接下来该怎么做吗?


尝试使用根权限 sudo chmod 777 file.php 或者检查您是否具有适当的 git 用户来检出代码库。 - amrs-tech
2
在Linux或Unix系统上,检查包含目录的权限。您必须能够写入包含目录以删除其中的文件。 - torek
是的,@torek,你说得对。你想把它作为答案吗? - MeltingDog
如果那是问题的话,在原始的非root chmod 上你会收到一个错误消息。此外,777 是过度的;给所有用户读、写和执行权限是没有意义的。644755 就足够了(只有在需要可执行时才使用后者)。 - Keith Thompson
2个回答

1
在基于Unix或Linux的系统上,删除文件或创建文件的能力通常由文件所在目录的权限控制。因此,file.php 取决于工作树(在本例中为.或其路径)的权限:
$ ls -ld
drwxr-xr-x 12 root root 4096 ...

或者:

# in a different directory
$ ls -ld
drwxrwxr-x 46 vagrant vagrant 4096 Aug 29 23:34 .

例如。

在前一种情况下,目录由root拥有,并且只能由root进行写入,因此只有超级用户可以创建或删除文件。在第二种情况下,目录由用户vagrant和组vagrant拥有,并且既可由用户又可由组进行写入,因此用户vagrant可以创建或删除文件,任何属于vagrant组的用户(在这个特定的系统上只有用户vagrant)也可以这样做。

如果您作为用户没有对包含目录的写访问权限,则可以根据需要更改所有权(用户和/或组)和模式,或者通过sudo以超级用户身份执行操作(即使权限设置为拒绝访问root,超级用户通常也可以执行任何操作)。明智的做法是限制作为超级用户执行的工作量。


0

根据您的操作系统,首先检查与该文件关联的权限

cd /path/to/repo
# assuming file.php is at the root directory of the repository
ls -alrth file.php
git checkout -- file.php

(在没有/的情况下尝试结账)

正如我在这里提到的那样,请确保该文件未被其他工具/编辑器打开。
另请参见此答案,并尝试在您的存储库中设置git config core.sharedRepository true


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接