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

时间:2011-08-26 02:42:21

标签: git

我知道有关git的问题与“无法取消链接”警告有关,但我无法使用它们。

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

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

...等。有数百个。

起初我认为这只是一个权限问题,因此我以递归方式向整个需求目录添加了组写权限,但没有任何更改。

编辑:正如下面的答案所示,我尝试做同样的事情,但其他一切都关闭了。我没有比以前更好的运气了。

这个问题尤其令人虚弱,因为我无法转向主干线以恢复正常发展。

29 个答案:

答案 0 :(得分:91)

在我第一次遇到此错误时,我的用户有权“写”到文件而不是包含目录。检查包含该文件的目录的权限。

答案 1 :(得分:77)

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

确保没有任何内容正在运行,然后再次尝试结帐。

注意:它也可能与安装Git的方式有关(在Windows上,如果C:\ProgramC:\Program Files中安装了msysgit,UAC可能会产生问题,请参阅“msysgit - sh.exe - fork: Permission denied - Vista 64 bit”和comment 2 of issue 437

注意:作为illustrated below,问题的另一个常见原因是目录上的权限问题(错误的所有者),不一定是无法取消链接的文件。

答案 2 :(得分:30)

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

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

答案 3 :(得分:23)

我在drupal 7中遇到了default-settings.php文件的问题。在这种情况下,我无法删除它或像@rtconner所说的那样恢复它。我没有使用此文件的应用程序或任何内容,最终导致权限错误。

我将chmod 777 *添加到该文件夹​​,然后我就可以将其还原没问题。

答案 4 :(得分:21)

您没有访问权限,可能是因为您不是所有者。

通过将所有者更改为您自己进行修复:

sudo chown -R your_login_name /path/to/folder

答案 5 :(得分:11)

您可以更改写入权限以完成此操作。

sudo chmod -R ug+w . 

此命令将为当前目录中的所有文件夹提供'w'权限。

答案 6 :(得分:6)

每当运行" git repack"我遇到了这个问题。或者" git gc"在我的OS X机器上,即使在运行带有管理员权限的git时也是如此,我终于在遇到这个页面后解决了它:http://hints.macworld.com/comment.php?mode=view&cid=1734

修复是打开一个终端,转到你的git repo,cd进入.git文件夹,然后执行:

chflags -R nouchg *

如果那是问题,那么之后,你的git命令将正常工作。

答案 7 :(得分:4)

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

答案 8 :(得分:3)

在以下情况下也会发生这种情况:

  1. 您在Docker容器中运行了进程,并且:

  2. 某些文件是由该流程生成的,并且:

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

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

  5. 如果是这种情况,请暂存您要提交的文件并运行:

    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选项,请参阅this for Dockerthis for Docker compose

答案 9 :(得分:2)

在我的情况下,文件夹名称中的“:”字符会阻止git repo在Windows上结帐。

答案 10 :(得分:2)

当我尝试git reset --hard时,我在虚拟机(运行Ubuntu)中出现此错误。

修复只是从OS X主机运行git reset --hard

答案 11 :(得分:2)

在Mac上的终端我只是这样做

  

sudo git checkout。 (清理所有东西)

然后

  

sudo git pull origin

答案 12 :(得分:1)

就我而言,我的Windows目录位于Dropbox文件夹下。这不是特定于Git的问题。刚创建文件(在这种情况下为锁定文件)后,Dropbox需要花一秒钟的时间进行同步。在此期间,Dropbox正在使用该文件,并且任何第3方程序(在本例中为Git)都无法删除该文件。

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

答案 13 :(得分:1)

其他建议都没有对我有用,但确实如此:

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

答案 14 :(得分:0)

git gc为我工作(在新标签中)。每次重新部署都会得到这个。谢谢http://www.saintsatplay.com/blog/2016/02/dealing-with-git-unlink-file-errors#.W4WWNZMzZZJ

答案 15 :(得分:0)

我解决了这个问题,只需删除所有临时数据>运行>%temp%>按回车键并删除所有临时文件并重新启动计算机。对我来说它现在正在工作。

答案 16 :(得分:0)

对我来说,消息的顶部是:

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后,一切恢复正常。

答案 17 :(得分:0)

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

答案 18 :(得分:0)

我认为这与您的文件许可有关:

sudo chmod 777 -R <your-git-folder>

答案 19 :(得分:0)

就我而言,通过将www-data设置为所有者可以解决权限问题:

chown -R www-data project_folder_name

答案 20 :(得分:0)

我遇到了同样的问题,我尝试了很少的替代方法。

但是最后给.git文件夹正确的权限可以解决问题。

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

答案 21 :(得分:0)

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

    chmod ug+w <directory path>

答案 22 :(得分:0)

通过将我的git客户端(GitExtensions)设置为始终以管理模式运行来解决这个问题。

答案 23 :(得分:0)

我遇到此错误,我认为问题是我在启动Eclipse并创建文件时已经以“以管理员身份运行”,因此它们归Admin所有(通过在文件夹上运行“ ls -la”来注意到)。当我后来试图隐藏文件时,它并没有让我(“无法取消链接文件”等)。在文件上执行chmod对我来说是解决方法。

答案 24 :(得分:0)

我遇到此错误,是由文件/文件夹的错误“所有者/群组”引起的。您必须向服务器管理员寻求帮助才能更改此文件/文件夹的“所有者/组”,然后再次使用“git pull”重试。或者,如果你是一个sudoer,只需sudo chown“你的所有者名称/你的组名”,然后再次尝试拉你的存储库。试试吧,它对我有100%的作用!

答案 25 :(得分:0)

确保所有关联的进程或线程未运行并执行结束任务或强制退出。

确保您更改了所有权。

答案 26 :(得分:0)

通常情况下,如果在 Windows 中发生这种情况,并且您使用 tortoisegit ,则它是 tortoisegit 的状态缓存。杀死这个过程,它将被释放。

答案 27 :(得分:0)

我只需要将用户从ubuntu切换到我实际用户名,我首先要做的事情。修好了。

答案 28 :(得分:0)

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

通过关闭另一个窗口中打开的Git Bash来解决 - IntelliJ中的另一个还原试用工作。