Git'致命:无法编写新的索引文件'

Jef*_*eff 106 git locking

我已经看到很多关于这个的其他线索,他们没有帮助.

我有一个非常简单的回购 - 两个JavaScript文件.我在Macbook上有100多GB.当我尝试将文件移动到子目录中并在本地暂存我得到的更改时...

致命:无法编写新的索引文件

无论我是在终端中执行所有操作还是使用像SourceTree这样的GUI,都会发生这种情况.此外,其中一个文件被锁定,我无法删除工作目录,直到我注销并重新登录.

为什么会这样?锁是否阻止某些东西上演?如果是这样,我在OS X上解锁问题文件的方法是什么?远程仓库是谷歌代码,如果这有所作为,虽然我还没有推到遥控器.一切都是本地的.

Ale*_*ird 169

在我的情况下,磁盘空间不足,所以我不得不从硬盘驱动器中删除文件以腾出空间.


the*_*oom 57

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

可能的解决方案

所以,经过多次google搜索,我尝试了以下内容:

  • 改变.git permssions(同一问题)
  • 更改.git/index权限(同一问题)
  • git将所有更改添加到提交(同一问题)
  • git rm-ing已删除的文件,因为他们报告的文件名太长错误(同样的问题)
  • git reset(软|头|硬)(同一期)
  • git clean(同一期)
  • 关掉windows defender(同样的问题)
  • 更新git(同一期)
  • 不同的git客户端(我使用gitbash)(同一个问题)
  • 喝2杯咖啡而不是1杯(同一期)

tl:博士 - 肮脏的解决方案

设法解决问题的唯一方法是复制索引文件,删除原始文件并重命名副本.

我知道它不是真正的"解决方案",但现在它神奇地工作> <,所有文件/分支都完好无损.如果有人知道为什么这可能有效,请告诉我.

  • 发现另一个原因:您可能没有磁盘空间. (80认同)
  • 我喝了3杯咖啡,但没有解决问题 (35认同)
  • 在我的情况下,Google云端硬盘正在上传(备份)文件,并且在此过程中它们已被锁定.完成上传后,提交工作正常. (19认同)
  • 感谢您提供有关Google云端硬盘的提示。我遇到了相同的问题,但使用了Dropbox。 (2认同)
  • 你的“肮脏的解决方案”对我有用(返回到以前的索引文件,重新添加并重新提交此后的所有更改) (2认同)

小智 15

我在Mac上遇到了同样的问题.它似乎是由文件系统ACL引起的.尝试chmod -RN /path/to/repo清除ACL.在这之后,我能够提交更改.使用技巧复制索引文件,删除原始文件并移回副本,实现相同的结果.


Cor*_*hip 14

如果您在某种在线同步服务(例如谷歌驱动器或保管箱)中设置了github,请尝试禁用同步,因为我遇到了同样的问题,这对我有用.


ton*_*ral 11

就我而言,暂停Dropbox同步解决了这个问题


Spy*_*yto 10

关闭 Visual Studio Code(在我的情况下有一个在文件保存时运行的自动上传后台作业)为我解决了这个问题。

解决方案的功劳:我的朋友和同事 Arnel。


Md.*_*rim 8

就我而言,解决方案只是向新用户添加权限。

当我安装新操作系统时,移动了我的存储库,它显示了这个确切的错误,我选择了根文件夹,然后添加了经过身份验证的用户以检查所有 在此处输入图片说明


gls*_*123 7

我碰巧文件.git / index被另一个进程(我的本地开发Web服务器)使用。我关闭了该过程,然后它起作用了。


For*_*Win 6

这对我有用:

rm -f ./.git/index.lock
Run Code Online (Sandbox Code Playgroud)


Fan*_*Fan 5

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

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

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

SysInternals Process Explorer - 转至“查找”>“查找句柄或 DLL”。在“句柄或 DLL 子字符串:”文本框中,键入文件的路径(例如“C:\path\to\file.txt”),然后单击“搜索”。应列出具有该文件的打开句柄的所有进程。

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

例如,Process Explorer 搜索显示已.git\index被 锁定vmware-vmx.exe。挂起 VMWare Player 虚拟机(通过共享文件夹访问 git 存储库)解决了该问题。


ruu*_*uud 5

我也有/有这个问题。就我而言,没有任何解释适用:

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

直到我发现,一旦我通过另一台(linux)计算机访问了 windows 文件夹,git 就毫无怨言地工作了。它一定与我在普通 debian buster 计算机上使用的 git 版本有关:git 1.2.20 给了我“无法写入新索引”错误,而从 ubuntu focus virtualbox (git 1.2.2) 添加了文件没有问题。