我知道git也有类似的"无法解除链接"警告的问题,但是我一直无法使用它们。
主要区别在于,当我没有以任何方式处理子模块时(我以前从未处理过它们),就会发生这种情况。我创建了一个名为"upgrade"的分支,删除了旧的框架文件,并复制了新的框架文件。我使用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
…等。有好几百个。
起初我认为这只是一个权限问题,所以我递归地在整个requirements目录中添加了组写权限,但是没有任何变化。
编辑:正如下面的答案所建议的那样,我试图做同样的事情,但其他一切都关闭了。我的运气不比以前好。
这个问题特别使我虚弱,因为我不能移动到主干以恢复正常的发育。
在我第一次遇到这个错误时,我的用户有"写"到文件的权限,但没有"写"到包含该文件的目录。检查包含该文件的目录的权限。
当一个进程没有释放这些文件的句柄时,我通常会看到这种错误。
确保没有任何程序正在运行,然后再次尝试签出。
注意:这也可能与Git的安装方式有关(在Windows上,如果msysgit安装在C:Program
或C:Program Files
, UAC可能会产生问题,参见"msysgit - sh.exe - fork: Permission denied - Vista 64 bit"和437号问题的注释2)
注意:如下图所示,导致这个问题的另一个常见原因是目录的权限问题(错误的所有者),而不一定是无法解除链接的文件。
在这种情况下,"Unlink"实质上意味着"delete file"。
这个错误不是由git本身引起的。在命令行或文件资源管理器中手动删除这些文件应该会出现类似的错误。
您没有访问权限,可能是因为您不是所有者。
修改owner为自己:
sudo chown -R your_login_name /path/to/folder
我在drupal 7中遇到了default-settings.php文件的问题。在这种情况下,我无法删除它或恢复它就像@rtconner说的。我没有一个应用程序或任何东西使用这个文件,它最终是一个权限错误。
我将chmod 777 *
添加到文件夹中,然后我能够恢复它没有问题。
可以通过修改写权限来完成。
sudo chmod -R ug+w .
该命令将赋予'w'
对当前目录下所有文件夹的权限。
这种情况也可能发生在:
-
你在Docker容器中运行了一个进程,并且:
-
这个过程生成了一些文件,并且
-
目标文件以卷的形式挂载在Docker主机上,并且:
-
您正在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
选项,参见Docker和Docker compose。
我在OS X机器上运行"git repack"或"git gc"时遇到了这个问题,即使在使用管理员权限运行git时也是如此,我终于在看到这个页面后解决了这个问题:http://hints.macworld.com/comment.php?mode=view&cid=1734
修复方法是打开一个终端,进入你的git仓库,cd到。git文件夹,然后执行:
chflags -R nouchg *
如果这是问题所在,那么在此之后,您的git命令将正常工作。
对于那些正在使用Intellij的人,正如@rtconner所说,这个问题不是由git引起的。由于您的IDE锁定了一个文件,git无法解除它的链接。因此,您需要关闭IDE,然后尝试通过命令行合并(或任何您喜欢的)它。
在MAC终端上我只做这个
sudo git checkout。(清理一切)
然后
sudo git pull origin
在我的例子中,它是一个文件夹名称中的":"字符,阻止git repo在windows上签出。
当我尝试执行git reset --hard
时,我在虚拟机(运行Ubuntu)中出现了这个错误。
解决方法就是在OS X主机上运行git reset --hard
。
在我的情况下,我的Windows目录在Dropbox文件夹下。这不是一个特定于git的问题。当一个文件(在本例中是锁文件)刚刚创建时,Dropbox需要再花一秒钟来进行同步。在此期间,该文件由Dropbox使用,任何第三方程序(在本例中为Git)都不能删除该文件。
我的解决方案是退出Dropbox,从而避免Dropbox的文件同步的幕后魔法。
其他的建议对我都不起作用,但这个建议起作用了:
sudo git reflog expire --expire=now --all && sudo git gc --prune=now --aggressive
我遇到了这个错误,这是由于文件/文件夹的"owner/group"错误引起的。您必须寻求您的服务器管理员的帮助,以更改该文件/文件夹的"所有者/组",并再次尝试使用"git pull"。或者,如果您是sudoer,只需sudo chown"您的所有者名称/您的组名称",然后再次尝试拉您的存储库。试试吧,对我来说100%有效!
确保任何相关的进程或线程没有运行,并在必要时执行end task或强制退出。
确保您更改了所有权权限。
一般来说,如果这种情况发生在Windows中,并且您正在使用tortoisegit,则它是tortoisegit的状态缓存。终止这个进程,它就会被释放。
我只需要将用户名从ubuntu切换到我最初使用的实际用户名。这就解决了问题。
解决了我通过设置我的git客户端(GitExtensions)总是在管理模式下运行。
我在使用IntelliJ
(14.1.3 Ultimate)时遇到了这个问题,我想在一些文件中恢复更改。
通过关闭在另一个窗口打开的Git Bash
解决- IntelliJ
的另一个恢复试验工作。
我遇到了这个错误,我认为问题是我在启动Eclipse并创建文件时"以admin身份运行",因此它们归admin所有(通过在文件夹上运行'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上运行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