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

我见过很多关于这个的其他线程,他们没有帮助。

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

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

无论我在terminal中执行所有操作,还是使用SourceTree等GUI,都会发生这种情况。 此外,其中一个文件被locking,我不能删除工作目录,直到我注销并返回。

为什么发生这种情况? 锁是否防止分级? 如果是这样,我怎么解开OS X上的问题文件? 远程回购是谷歌代码,如果这有所作为,但我不推动到远程呢。 一切都是本地的。

过去几天我一直有这个问题。 基本上,没有我的知识,整个回购已经被转移到一个新的文件系统,当我试图运行git状态,它突然报告,回购中的每个文件已被udpated。

可能的解决scheme

所以,经过多次谷歌search,我尝试了以下内容:

  • 改变.git permssions(同样的问题)
  • 改变.git / index权限(同样的问题)
  • git添加所有更改提交(相同的问题)
  • git rm-ing删除的文件,因为他们报告文件名太长错误(同样的问题)
  • git reset(soft | Head | Hard)(同样的问题)
  • git clean(同样的问题)
  • closuresWindows Defender(同样的问题)
  • 更新git(同样的问题)
  • 不同的git客户端(我使用gitbash)(同样的问题)
  • 喝2杯咖啡而不是1杯(同一期)

tl:dr – 肮脏的解决scheme

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

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

在我的情况下,磁盘空间不足,所以我不得不从硬盘上删除文件以腾出空间。

我在Mac上遇到同样的问题。 这似乎是由文件系统ACL造成的。 尝试使用chmod -RN /path/to/repo来清除ACL。 这样做后,我能够提交更改。 使用诀窍复制索引文件,删除原件并将拷贝移回到相同的结果。

在我的情况下,暂停Dropbox同步解决了这个问题

它发生在我身上的文件.git /索引被另一个进程(我的本地开发Web服务器)使用。 我closures了这个过程,然后工作。

我有ACL(不知何故)附加到.git文件夹中的所有文件。

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

您可以使用chmod -N (对于文件夹/文件)或chmod -RN (recursion)删除ACL,

在我的情况下,这是一个并发运行EGit。 重新启动后,它像往常一样工作。

如果你有一个在线同步服务,如谷歌驱动器或Dropbox的github安装,请尝试禁用同步,因为我有同样的问题,这对我工作。

你尝试'混帐添加'。 。 这一切将会改变吗? (你可以通过git reset HEAD删除不必要的添加文件)

如果你使用的是Windows操作系统,请确保你使用的程序,无论是源码树还是gitterminal,都以pipe理员身份运行。 我得到相同的确切的错误消息。 您可以右键单击该程序以pipe理员身份运行,也可以将其属性更改为始终以pipe理员身份运行。

如果你在这期间得到这个:

这很可能是由于某些软件locking了你的repo的索引文件,比如备份软件,反病毒,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再继续。

没有足够的空间是一个问题。 清理并尝试

这个问题可能是由进程locking的.git\index引起的。

链接找出在Windows中locking文件或文件夹的进程指定以下方法来查找locking的文件:

SysInternals进程资源pipe理器 – 转到查找>查找句柄或DLL。 在“Handle or DLL substring:”文本框中,input文件的path(例如“C:\ path \ to \ file.txt”)并单击“Search”。 应该列出所有具有该文件的开放句柄的进程。

使用上述方法来查找哪个进程locking了.git\index ,然后停止locking可执行文件。 这应该可以解决问题。

例如, Process Explorer Search显示我的.git\indexvmware-vmx.exelocking。 挂起VMWare Player虚拟机(通过共享文件夹访问git仓库)解决了这个问题。