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

时间:2010-09-28 14:45:17

标签: git macos

我有一个已在git下管理的现有项目。我最近不得不重新进行计算机(OS X Snow Leopard)的重建,并返回项目,git可以跟踪项目的变化,但我无法保存任何东西给git。我尝试时在标题中收到错误:

Dans-iMac-335:[app-name-obscured] apple$ git add app/models/*
fatal: Unable to write new index file

从这种情况中恢复的最佳方法是什么?有一个heroku存储库版本,但它与这个版本非常不同步。大概我可以使用一个新的克隆作为基础,并更新每个文件,但这似乎过于费力且容易出错。

git在这里寻找的是什么,它无法找到,是否有可以恢复它的变化?

顺便说一句,从我所知道的文件权限是正确的 - 受控制的文件和.git组件都由我拥有rw访问...

14 个答案:

答案 0 :(得分:62)

我刚遇到同样的情况,原来我的文件系统已经满了。

答案 1 :(得分:4)

您是否具有.git的写入权限(=您可以在那里创建新文件并编辑现有文件)吗?如果没有,则调整文件权限。

如果你有写权限,似乎你发现了一个错误。您可以尝试通过

恢复
  1. 从当前工作副本创建克隆
  2. 从克隆的工作副本中删除所有文件
  3. 将当前工作副本中的所有wc文件复制到克隆(并且不要复制.git)
  4. 尝试在克隆中提交一些内容。
  5. 当最后一步工作时,您需要设置从当前仓库到克隆的远程分支,然后您可以使用克隆的仓库作为新的工作副本。

答案 2 :(得分:3)

我正在使用Parallels在我的Mac上运行Ubuntu。我可以git init,但不是git add。我认为问题是git add需要与底层git数据库进行原子同步。由于我使用的文件系统实际上是在我的Mac上,Parallels通过网络共享从我的Mac导出。我相信这意味着git无法做到它想要的。在本地移动文件修复了问题(在我的情况下这很容易,因为我在我的Mac上使用DropBox,所以我只是在运行Parallels的Ubuntu上安装了DropBox)

答案 3 :(得分:2)

我遇到过与SFTP网络驱动器(免费)类似的问题。解决方案是:在SFTP网络驱动器的配置文件设置中找到填写复选​​框“移动前删除现有目标”。

答案 4 :(得分:2)

我能够通过进入git initiator app中的.git文件夹并删除index.lock / index文件来解决这个问题。我不得不重新索引整个应用程序,但它解决了这个问题。

答案 5 :(得分:1)

如果您使用sshfs,请添加选项-o workaround=rename,如下所述:http://alan.lamielle.net/2009/07/08/git-over-sshfs

答案 6 :(得分:1)

我想指出此错误的另一个原因

如果你正在克隆一个包含另一个git存储库的git存储库(而不是子模块),你将会遇到这种情况。

希望它会对某人有所帮助。

答案 7 :(得分:1)

我有同样的问题。我仍然不知道原因,但我的解决方法是删除index.lock sudo rm -f index.lock,然后我给了索引sudo chmod 777 index的写权限。在此之后,我能够分阶段进行。问题是我几乎所有时间都要做这件事。

答案 8 :(得分:1)

这是旧的,但我的原因是Dropbox。我的本地存储库存储在我的Dropbox文件夹中,在完成命令之前我不得不暂停Dropbox同步。

答案 9 :(得分:0)

我有类似的问题。 " git reset --hard"为我工作。

答案 10 :(得分:0)

要添加:令人惊讶的是,一些git插件会阻止索引文件。我的Eclipse Kepler有默认插件,偶尔会从git repo更新一些自己的信息,在该操作期间阻止索引文件。

答案 11 :(得分:0)

我在visual studio上使用git时遇到过这个问题,我的解决方案是以管理员身份运行visual studio

答案 12 :(得分:0)

我遇到了同样的错误,因为Google Drive的Windows备份和同步客户端没有释放对此存储库中两个文件的锁定。在同步客户端完成其工作之后,解决方法是:Process Explorer - >查找 - >查找句柄或DLL - >关闭手柄。

答案 13 :(得分:0)

我有同样的问题。 “致命:无法写入新的索引文件”

我发现原因是我的磁盘已满。我从中删除了其他内容,然后我的git repo恢复了,一切又恢复了。