Git’dead: 无法写入新的索引文件’

我看过很多关于这个的其他帖子,但它们没有帮助。

我有一个非常简单的回购-两个 JavaScript 文件。我的 Macbook 有100 + GB。当我试图将文件移动到一个子目录并在本地进行更改时,我会得到..。

无法写入新的索引文件

无论是在终端中执行所有操作,还是使用类似 SourceTree 的 GUI,都会发生这种情况。此外,其中一个文件被锁定,我不能删除的工作目录,直到我注销和回来。

为什么会这样?这个锁是不是阻止了什么东西进入舞台?如果是这样,我应该怎样解锁 OS X 上的问题文件?远程回购是谷歌代码,如果有区别的话,虽然我还没有推到远程。所有东西都是本地的。

176414 次浏览

你试过“ git add”了吗? (可以通过 git 重置 HEAD 删除不必要的添加文件)

过去几天我一直有同样的问题。基本上,在我不知情的情况下,整个回购已经被移动到一个新的文件系统,当我试图运行 git status 时,它突然报告说回购中的每个文件都已经被更新。

可能的解决办法

所以,经过大量的谷歌搜索,我尝试了以下方法:

  • 更改. git 权限(同一问题)
  • 更改. git/index 权限(相同问题)
  • Git 添加要提交的所有更改(同一问题)
  • Git rm-ing 已删除的文件,因为它们报告的文件名太长错误(同样的问题)
  • Git 复位(软 | 头 | 硬)(同一问题)
  • 清洁(同一问题)
  • 关闭 Windows Defender (同一问题)
  • 更新 git (同一问题)
  • 不同的 git 客户端(我使用 gitbash)(相同的问题)
  • 喝2杯咖啡而不是1杯(同样的问题)

肮脏的溶液

解决这个问题的唯一办法是复制索引文件,删除原始文件并重命名副本。

我知道它不是一个真正的“解决方案”,但现在它神奇地工作 > < ,所有的文件/分支都完好无损。如果有人知道这为什么有用,请告诉我们。

在我的情况下,磁盘耗尽了空间,所以我不得不删除文件从硬盘驱动器,使空间。

在我的例子中,它是一个并发运行的 EGit。

我碰巧发现那份文件。另一个进程(我的本地开发 Web 服务器)正在使用 git/index。我终止了这个过程,然后它起作用了。

我在 Mac 上也遇到过同样的问题。它似乎是由文件系统 ACL 引起的。尝试 chmod -RN /path/to/repo清除 ACL。这样做之后,我就能够提交更改了。使用复制索引文件、删除原始文件和将复制文件移回的技巧可以得到相同的结果。

我将 ACL (以某种方式)附加到. git 文件夹中的所有文件。

用. git 文件夹中的 ls -le检查它。

您可以使用 chmod -N(针对文件夹/文件)或 chmod -RN(递归)删除 ACL

如果你使用的是 Windows 系统,确保你正在使用的程序,无论是源代码树还是 git 终端,都是以管理员身份运行的。我收到了一模一样的错误消息。您可以右键单击该程序以管理员身份运行,也可以更改其属性以始终以管理员身份运行。

如果你是在重新调整基地的时候得到这个的话:

这很可能是由于一些软件锁定了您的回购索引文件,如备份软件,反病毒,IDE 或其他 git 客户端。

在大多数情况下,锁只是一个短暂的时刻,所以它只是发生在坏时机和坏运气。

然而,git rebase --continue会抱怨下一个命令是一个空提交:

The previous cherry-pick is now empty, possibly due to conflict resolution.
If you wish to commit it anyway, use:


git commit --allow-empty

要解决这个问题,只需运行 git reset并再次尝试 git rebase --continue

在我的例子中,暂停 Dropbox 同步解决了这个问题

如果你的 github 设置在某种在线同步服务中,比如 google drive 或者 drop box,试着在同步服务尝试读/写到文件时禁用同步,而 github 尝试做同样的事情,导致 github 不能正常工作。

没有足够的空间是一个问题。清理和再试一次

错误消息 fatal: Unable to write new index file意味着我们无法将新内容写入 git 索引文件 .git\index(有关 git index 的更多信息,请参见 给你)。在回顾了对这个问题的所有答案之后,我总结了以下根本原因:

  • 新内容的大小超过了磁盘的可用容量
  • 用户无权访问此文件。(解决方案: 授予权限)
  • 用户有权限,但是 .git\index被其他用户或进程锁定。(解决方案: 解锁文件)

链接 找出正在 Windows 中锁定文件或文件夹的进程指定了以下方法来找出锁定特定文件的进程:

系统内部进程资源管理器-转到查找 > 查找句柄或 DLL。在“ Handle or DLL substring:”文本框中,键入文件的路径(例如“ C: path to file.txt”)并单击“ Search”。应该列出具有该文件的打开句柄的所有进程。

使用上述方法查找锁定 .git\index的进程,然后停止锁定的可执行文件。

例如,进程资源管理器搜索显示 .git\indexvmware-vmx.exe锁定。挂起 VMWare Player 虚拟机(通过共享文件夹访问 git repo)解决了这个问题。

关闭 VisualStudio 代码(在我的例子中有一个在文件保存上运行的自动上传后台作业)为我解决了这个问题。

我的朋友兼同事阿内尔解决了这个问题。

问题: 当我在 git 中检查一些修改过的文件时,得到了这个错误。 我有两个用户 ABC 和 XYZ。文件有 uid: gid 的 ABC,但它没有 git 访问权限,并试图用相同的。

我试过的解决办法是: XYZ 拥有 git 访问权限,尝试用 sudo 检出文件,结果奏效了... ... ! !

以下是对我有效的方法:

背景:

  1. 在服务器上生成项目

  2. 返回一个 HEAD detached at <commit-SHA>

  3. 无论我在本地做什么操作,都会出现这个错误。更具体地说:

    • Git 退房
    • 重置头部,用力

解决方案

  1. 只需删除文件 <work-dir>/.git/index
  2. git status将表示项目中的所有文件都没有被跟踪(这里不奇怪)。
  3. git reset HEAD --hard
  4. 回到 HEAD detached at <commit-SHA>时,做一个 git status,但然后你应该能够
  5. git checkout <some-branch>

你又回到正轨了!

重要!

这只是因为我“仅仅”建设。没有对代码执行任何宝贵的修改。如果您实际上处于“开发时间”,那么我建议您先保存您的工作,或者使用其他方法。

希望能有所帮助:)。

这对我很有效:

rm -f ./.git/index.lock

我在窗口上使用 GitExtended 时遇到了这个问题。通过授予当前用户(我)对包含回购的文件夹的完全权限来修复。

还有一次,尽管我从 Git 扩展中得到了错误,但是我能够从 VisualStudio2015中提交相同的文件。

还有一次我不得不从. git 文件夹中删除“ index”文件

我的情况有点有趣:

我运行 git log 来检查某个提交,然后没有正确退出,我按 ctrl + c 退出。

然后索引似乎被锁定了,所以我再次运行 git log,然后按 Q 退出。

问题解决:)

我认为一些后台备份解决方案,如谷歌备份和同步阻止访问索引文件。我关闭了应用程序,Sourcetree 没有任何问题。Dropbox 似乎也是这么做的(@tonymayoral)。

在我的例子中,解决方案只是向新用户添加权限。

当我安装新的操作系统,移动我的回购周围,它显示了这个确切的错误,我选择了根文件夹,然后添加认证的用户检查所有 enter image description here

我也有同样的问题。我重新启动了电脑,问题就解决了。

在我的例子中,它是一个监视文件系统变化的 nodemon实例。

我也有这个问题,在我的情况下,没有任何解释适用于:

  • 足够的磁盘空间
  • 我有足够的权限,我可以编写索引文件,我可以重命名它,我可以创建它,解决方案没有什么
  • 重启窗户不起作用
  • 未被进程锁定的索引

直到我发现一旦我通过另一台(linux)计算机访问 Windows 文件夹,git 就可以毫无怨言地工作了。它一定和我在普通 Debian Buster 电脑上使用的 git 版本有关: git 1.2.20给我的是“无法写入新索引”错误,而在 ubuntu 焦点虚拟机(git 1.2.2)上添加文件没有任何问题。

和 Sudo 一起工作对我很有帮助。

例如: Sudo git add-r

由于某种原因,从 wsl 终端执行 git add工作得很好。但是崇高的合并总是会给我带来这个错误。结果 VS 代码阻止了这一切。关闭 VS 代码使它工作。有人也用同样的方法解决了这个问题-https://stackoverflow.com/a/47871586/6236710

在安装了 Anaconda 之后,我也遇到了同样的问题。我尝试了所有的解决方案,如 允许无磁盘。所以,我只是删除回购和克隆它从远程。问题解决了。

我又进行了一次提交,成功了。

    sbe:/var/xxxxx/rmm/sprcg2/app3536847/sas % git commit -m "My summary"
[master a2257ec] My summary
9 files changed, 2747 insertions(+), 7047 deletions(-)
rename ish_extracts/prog/{t.sas => query.sas} (55%)
rewrite ish_extracts/prog/t.sas (98%)

我知道有这么多的原因,但我的解决方案是断开我的 Mac SMB 共享,并重新连接它。我发现法新社的股票根本不起作用,但中小企业的股票起作用。想想看。