【问题标题】:Git 'unable to unlink old file (permission denied)' error, but updating permissions doesn't workGit'无法取消链接旧文件(权限被拒绝)'错误,但更新权限不起作用
【发布时间】:2019-08-30 04:20:51
【问题描述】:

我正在处理分支 (Branch-A) 中的单个文件,提交了我的代码并推送了我的更改。然后我检查了一个新分支(Branch-B)做了一些工作,但注意到我在 Branch-A 中处理的同一个文件上得到了更改。

我运行 git checkout -- /file.php 来恢复更改,但收到了消息:

错误:无法取消链接旧的“file.php”(权限被拒绝)

谷歌搜索这个问题,我发现很多 StackOverflow 答案都说要更改文件的权限,我试过了:

chmod ug+w file.php

chmod 777 file.php

但我仍然遇到同样的错误信息。

有人知道这是什么或者我接下来可以做什么吗?

【问题讨论】:

  • 尝试使用 root 权限 sudo chmod 777 file.php 或检查您是否有合适的 git 用户来签出存储库
  • 在 Linux 或 Unix 系统上,检查 包含目录 的权限。您必须能够编写包含目录才能删除其中的文件。
  • 是的,你是对的@torek。你愿意这样回答吗?
  • @amrs-tech:如果这是问题所在,您将在原始非 root chmod 上收到错误消息。另外,777 是多余的;授予所有用户读、写和执行权限是没有意义的。 644755 就足够了(后者仅在需要可执行时)。

标签: git


【解决方案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),也可以执行任何操作。限制作为超级用户完成的工作量是明智的。

【讨论】:

    【解决方案2】:

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

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

    (尝试不带/ 的结帐)

    作为我mentioned here,请确保该文件未被任何其他工具/编辑器打开。
    另请参阅this answer,并尝试在您的存储库中设置git config core.sharedRepository true

    【讨论】:

      猜你喜欢
      • 2019-03-01
      • 2019-11-18
      • 2011-11-04
      • 2019-06-26
      • 1970-01-01
      • 1970-01-01
      • 2012-11-15
      • 2017-12-23
      相关资源
      最近更新 更多