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

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

主要的区别是,当我没有以任何方式处理子模块时(我从来没有处理过)。 我创build了一个名为“升级”的分支,删除了旧的框架文件,并复制到新的框架文件中。 我用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 

…等等。 有数百个。

起初我以为这只是一个权限问题,所以我递增地将组写入权限添加到整个需求目录中,但没有任何改变。

编辑:正如在下面的答案build议,我试图做同样的事情,但其他一切closures。 我没有比以前更幸运了。

这个问题是特别的虚弱,因为我不能移动到树干恢复正常的发展。

非常感谢,

丹尼尔·莫尼斯

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

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

注意:它也可能与Git的安装方式有关(在Windows上,如果msysgit安装在C:\ProgramC:\Program Files ,UAC可能会产生问题,请参阅msysgit -sh.exe -fif:Permission denied – Vista 64位 “和问题437的评论2 )

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

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

这个错误不是由git本身造成的。 你应该有类似的错误手动删除这些文件,在命令行或文件浏览器。

我遇到了drupal 7中default-settings.php文件的问题。在这种情况下,我无法删除它,或像@rtconner所说的那样将其还原。 我没有一个应用程序或任何使用这个文件,并最终成为一个权限错误。

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

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

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

 sudo chown -R your_login_name /path/to/folder 

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

 sudo chmod -R ug+w . 

这个命令会给当前目录中的所有文件夹赋予'w'权限。

我在我的OS X机器上运行“git repack”或“git gc”时遇到了这个问题,即使在运行具有pipe理权限的git时也是这样,我在遇到这个页面后终于解决了这个问题: http : //hints.macworld.com /comment.php?mode=view&cid=1734

解决的办法是打开一个terminal,进入你的git仓库,cd到.git文件夹,然后:

 chflags -R nouchg * 

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

对于那些正在使用Intellij的人来说 ,就像@rtconner所说的这个问题不是由git引起的。 由于你的IDE被locking,git文件无法取消链接。 所以,你需要closures你的IDE,然后尝试通过命令行来合并(或者任何你喜欢的)。

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

  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 {}' 

一个更清洁的解决scheme可能会使用--user选项,请参阅Docker和Docker撰写 。

在我的情况下,它是一个文件夹名称中的“:”字符preventitng git回购在Windows上签出。

在Mac上的terminal,我只是这样做

sudo git结帐。 (清理一切)

接着

sudo git拉来源

我有一个虚拟机(运行Ubuntu),当我试图做git reset --hard这个错误。

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

我遇到了这个错误,它是由文件/文件夹的 “owner / group”错误造成的。 你必须寻求帮助你的服务器pipe理员来改变这个文件/文件夹的“所有者/组”,然后再次使用“git pull”重试。 或者,如果你是一个sudoer,只是sudo chown“你的所有者名称/你的组名”,并再次拉动你的存储库。 试试吧,它对我有用100%!

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

确保你改变了所有权。

一般来说,如果在Windows中发生这种情况,并且您正在使用tortoisegit ,则是tortoisegit的状态caching。 杀死这个过程,它将被释放。

我只是不得不把用户从Ubuntu的切换到我第一次做的东西的实际用户名。 这固定它。

通过将我的git客户端(GitExtensions)设置为始终以pipe理员模式运行解决了我。

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

通过closures在另一个窗口中打开Git Bash解决 – IntelliJ另一个恢复试验工作。

没有其他的build议为我工作,但是这样做:

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