Git Checkout 警告: 无法取消链接文件,权限被拒绝

我知道有关“无法解除链接”警告的 git 也有类似的问题,但我还没有能够使用它们。

主要区别在于,这种情况发生在我没有以任何方式处理子模块的时候(我以前从未处理过它们)。我创建了一个名为“升级”的分支,删除了旧的框架文件,并复制到新的文件中。我用了 git add-A 然后提交了所有东西。当我试图签出主干分支时,它响应了以下错误:

warning: unable to unlink requirements/views/sk/index.php: Permission denied
warning: unable to unlink requirements/views/sv/index.php: Permission denied
warning: unable to unlink requirements/views/zh/index.php: Permission denied
warning: unable to unlink requirements/views/zh_cn/index.php: Permission denied
warning: unable to unlink requirements/views/zh_tw/index.php: Permission denied

等等,有几百个。

起初,我认为这只是一个权限问题,所以我递归地向整个需求目录添加了组写权限,但是没有改变。

编辑: 正如下面的一个答案所建议的那样,我试图做同样的事情,但是其他的都关闭了。我的运气比以前差多了。

这个问题是特别削弱,因为我不能移动到主干回到正常的开发。

167859 次浏览

当有一个进程没有释放这些文件的句柄时,我通常会看到这种错误。

确保没有运行任何程序,然后再次尝试结帐。

注意: 它也可能与 Git 的安装方式有关(在 Windows 上,如果 msysgit 安装在 C:\ProgramC:\Program Files中,UAC 可能会产生问题,请参阅“ 拒绝权限-Vista 64位”和 第437期第2段)

注意: 作为 如下图所示,问题的另一个常见原因是目录(错误的所有者)上的权限问题,不一定是无法解除链接的文件上的权限问题。

在这种情况下,“解除链接”实际上意味着“删除文件”。

此错误不是由 git 本身引起的。在命令行或文件资源管理器中手动删除这些文件时,应该会出现类似的错误。

我在 Drupal 7中遇到了 default-setings.php 文件的问题。在这种情况下,我不能像@rtconner 说的那样删除或恢复它。我没有一个应用程序或任何东西使用这个文件,它最终是一个权限错误。

我添加了 chmod 777 *到文件夹,然后我能够恢复它没有问题。

在我第一次遇到这个错误时,我的用户有权“写入”文件,但没有写入包含该文件的目录。检查包含该文件的目录的权限。

对于那些使用 聪明的用户,@rtconner 说这个问题不是由 git 引起的。由于 IDE 被锁定,git 无法取消它的链接。因此,您需要关闭您的 IDE,然后尝试通过命令行合并它(或者任何您喜欢的方式)。

在我的例子中,文件夹名中有一个“ :”字符,阻止 git repo 在 windows 上结帐。

我遇到了这个错误,它是由错误的 文件/文件夹「业主/团体」造成的。您必须寻求服务器管理员的帮助,以更改此文件/文件夹的“ owner/group”,并再次使用“ git pull”重试。或者,如果您是 sudoer,只需要 sudo chown“ your owner name/your group name”,然后再次尝试提取存储库。试试看,对我百分百有效!

您没有访问权限,也许是因为您不是所有者。

通过将所有者改变为你自己来修复:

sudo chown -R your_login_name /path/to/folder

确保没有运行任何关联的进程或线程,并根据需要执行结束任务或强制退出。

确保您更改了所有权权限。

一般来说,如果在 窗户中发生这种情况,并且您正在使用 龟背,那么它就是 龟背的状态缓存。终止这个进程,它就会被释放。

无论何时在我的 OS X 机器上运行“ git repack”或“ git gc”,甚至在使用管理员权限运行 git 时,我都会遇到这个问题,我最终在看到这个页面后解决了这个问题: http://hints.macworld.com/comment.php?mode=view&cid=1734

解决方案是打开一个终端,进入你的 git repo,cd 到. git 文件夹,然后做:

chflags -R nouchg *

如果这是问题所在,那么在此之后,您的 git 命令将正常工作。

我只需要把用户从 ubuntu 切换到我的实际用户名,这是我第一次用这个名字做事情。修好了。

通过将我的 git 客户端(GitExtended)设置为始终在管理模式下运行,为我解决了这个问题。

我在使用 IntelliJ(14.1.3 Ultimate)时遇到了这个问题,我想恢复某些文件中的更改。

通过关闭在另一个窗口中打开的 Git Bash解决了这个问题—— IntelliJ中的另一个恢复试验起作用了。

您可以更改写权限来完成它。

sudo chmod -R ug+w .

此命令将授予工作目录中所有文件夹的 'w'权限。

在 Mac 的终端上,我就这么做

Sudo git checkout (清理所有东西)

然后

起源于 sudo git pull

这种情况也可能发生在以下情况:

  1. 您运行了一个进程 在 Docker 集装箱里,然后:

  2. 这个过程生成了一些文件,并且:

  3. 文件的目标作为卷挂载在 Docker 主机上,并且:

  4. 您正在 Docker 主机上运行 git


如果是这种情况,那么设置您希望提交的文件并运行:

git diff --name-only --cached | xargs ls -l

符合上述标准的文件前面将加上:

-rw-r--r-- 1 root root ...

它们为 root所拥有,不可写,这是不好的。 为了解决这个问题:

 git diff --name-only --cached | xargs -i sh -c 'sudo chown $USER:$USER {}; chmod +w {}'

一个更干净的解决方案可能是使用 --user选项,请参阅 这是为了多克这是给多克的作品

当我尝试执行 git reset --hard时,在一台虚拟机(运行 Ubuntu)中出现了这个错误。

修正方法只是从 OS X 主机上运行 git reset --hard

其他的建议对我都没用,但这个有用:

sudo git reflog expire --expire=now --all && sudo git gc --prune=now --aggressive

我遇到了这个错误,我认为问题在于,当我启动 Eclipse 并创建文件时,我已经“以管理员身份运行”,因此它们属于管理员(通过在文件夹上运行“ ls-la”可以注意到)。当我后来试图隐藏文件,它不让我(’无法解除链接的文件’和所有的)。对文件进行 chmod 是我的解决方案。

Git gc 为我工作(在一个新的标签)。得到这与每个基础。感谢 http://www.saintsatplay.com/blog/2016/02/dealing-with-git-unlink-file-errors#.W4WWNZMzZZJ

您所需要做的就是提供权限,从项目的根目录运行以下命令:

    chmod ug+w <directory path>

我也有同样的问题,我尝试了一些其他人建议的替代方案。

但最终给予.git 文件夹正确的权限解决了这个问题。

sudo chown -R "${USER:-$(id -un)}" .git

在我的例子中,通过将 www-data设置为所有者解决了权限问题:

chown -R www-data project_folder_name

在我的情况下,我的 Windows 目录位于 Dropbox 文件夹下。这不是 Git 特有的问题。当一个文件(在本例中是锁文件)刚刚被创建时,Dropbox 需要多花一秒钟来完成同步。在此期间,Dropbox 正在使用该文件,并且任何第三方程序(在本例中为 Git)都不能删除该文件。

我的解决方案是退出 Dropbox,从而避免 Dropbox 文件同步的幕后魔术。

我在窗口框上运行 Git Bash 时遇到了这个错误。在我的特殊情况下,我只需要以管理员身份打开 Git Bash。

对我来说,最重要的是:

Auto packing the repository in background for optimum performance.
See "git help gc" for manual housekeeping.
error: The last gc run reported the following. Please correct the root cause
and remove .git/gc.log.
Automatic cleanup will not be performed until the file is removed.

所以我删除了 rm .git/gc.log的文件,然后我得到:

Auto packing the repository in background for optimum performance.
See "git help gc" for manual housekeeping.
error: The last gc run reported the following. Please correct the root cause
and remove .git/gc.log.
Automatic cleanup will not be performed until the file is removed.


warning: There are too many unreachable loose objects; run 'git prune' to remove them.

运行 git prune后,一切恢复正常。

我解决了这个问题,只需删除所有的临时数据 > 运行 >% temp% > 点击进入和删除所有的临时文件并重新启动计算机。对我来说,它现在起作用了。

我在 Windows 上也遇到了同样的问题,通过使用下面的命令修复了这个问题:

git show feature-branch:./filePath > ./filePath