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

时间:2013-04-17 15:44:28

标签: git locking

我已经看到很多关于此问题的其他帖子,他们没有帮助。

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

  

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

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

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

25 个答案:

答案 0 :(得分:144)

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

答案 1 :(得分:54)

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

可能的解决方案

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

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

tl:dr - dirty solution

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

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

答案 2 :(得分:14)

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

答案 3 :(得分:10)

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

答案 4 :(得分:9)

如果您在某种在线同步服务中设置了github,例如谷歌驱动器或保管箱,请尝试禁用同步,因为同步服务尝试读取/写入文件,因为github尝试执行相同操作,导致github无法正常工作。

答案 5 :(得分:5)

我发现文件.git / index正被另一个进程(我的本地开发Web服务器)使用。我关闭了这个过程,然后就可以了。

答案 6 :(得分:5)

这对我有用:

rm -f ./.git/index.lock

答案 7 :(得分:3)

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

使用.git文件夹中的ls -le进行检查。

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

答案 8 :(得分:3)

我认为某些后台备份解决方案(例如Google备份和同步)会阻止对索引文件的访问。我关闭了应用程序,Sourcetree完全没有问题。似乎Dropbox的功能相同(@tonymayoral)。

答案 9 :(得分:2)

在我的情况下,它是一个并发运行的EGit。重启eclipse后,它照常工作。

答案 10 :(得分:2)

如果您使用的是Windows框,请确保您正在使用的程序(无论是源树还是git终端)以管理员身份运行。我收到了同样的错误消息。您可以右键单击该程序以管理员身份运行,也可以将其属性更改为始终以管理员身份运行。

答案 11 :(得分:2)

我有同样的问题。我重新启动计算机,问题已解决。

答案 12 :(得分:2)

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

当我安装新操作系统时,移动了我的存储库,并显示了这个确切的错误,我选择了根文件夹,然后添加了经过身份验证的用户来检查所有 enter image description here

答案 13 :(得分:1)

此问题可能是由进程锁定.git\index引起的。

链接Find out which process is locking a file or folder in Windows指定了以下查找锁定文件的方法:

  

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

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

例如,Process Explorer Search表示我的.git\indexvmware-vmx.exe锁定。暂停VMWare Player虚拟机(通过共享文件夹访问git repo)解决了这个问题。

答案 14 :(得分:1)

关闭Visual Studio代码(在我的情况下,在文件保存中运行自动上传器后台作业)解决了我的问题。

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

答案 15 :(得分:1)

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

答案 16 :(得分:1)

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

答案 17 :(得分:0)

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

我尝试过的解决方案: XYZ正在使用git访问,尝试使用sudo检出文件并且它有效.. !!

答案 18 :(得分:0)

这对我有用:

<强>上下文

  1. 在服务器上构建项目

  2. git status返回HEAD detached at <commit-SHA>

  3. 我在本地做了什么操作,我有这个错误。更具体地说:

    • git checkout
    • git reset HEAD --hard
  4. <强>解决方案

    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>
    6. 你又回到了正轨!

      <强> !!重要!!

      这只是因为我“正在”建造。没有对代码进行任何珍贵的修改。如果你实际上处于“开发时间”,那么我建议先保存你的工作或者去另一种方法。

      希望它会有所帮助:)。

答案 19 :(得分:0)

我在Windows上使用GitExtensions时出现此问题。通过在包含存储库的文件夹上授予当前用户(me)的完全权限来修复。

另一次,即使我从Git Extensions收到错误,我也可以从Visual Studio 2015提交相同的文件。

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

答案 20 :(得分:0)

我的情况有点有趣:

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

然后索引似乎已被锁定。因此,我再次运行git log,然后按Q退出。

问题已解决。 :)

答案 21 :(得分:0)

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

这很可能是由某些软件锁定您的仓库的索引文件引起的,例如备份软件,防病毒,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

答案 22 :(得分:0)

在我的情况下,这是一个nodemon实例,正在监视文件系统的更改。

答案 23 :(得分:0)

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

  • 足够的磁盘空间
  • 我有足够的特权,可以编写索引文件,可以重命名,可以创建它,解决方法无济于事
  • 重新启动Windows无效
  • 索引未被进程锁定

直到我发现通过另一台(linux)计算机访问Windows文件夹之前,git都可以正常工作而没有任何抱怨。它必须与我在普通的debian buster计算机上使用的git版本有关:git 1.2.20给我“无法编写新索引”错误,而从ubuntu模糊虚拟盒(git 1.2.2)添加了文件没有问题。

答案 24 :(得分:0)

使用 sudo 运行对我有用。

例如: 须藤 git add -r