Git'致命:无法写入新的索引文件'
Posted
技术标签:
【中文标题】Git\'致命:无法写入新的索引文件\'【英文标题】:Git 'fatal: Unable to write new index file'Git'致命:无法写入新的索引文件' 【发布时间】:2013-04-10 11:30:24 【问题描述】:我已经看到了很多关于此的其他线程,但它们没有帮助。
我有一个非常简单的 repo - 两个 javascript 文件。我在 Macbook 上有 100+ GB。当我尝试将文件移动到子目录并在本地暂存时,我得到的更改...
致命:无法写入新的索引文件
无论我在终端中执行所有操作还是使用像 SourceTree 这样的 GUI,都会发生这种情况。此外,其中一个文件被锁定,在我注销并重新登录之前,我无法删除工作目录。
为什么会这样?锁是否阻止了某些东西的暂存?如果是这样,什么/如何解锁 OS X 上的问题文件?远程仓库是谷歌代码,如果这有所作为,虽然我还没有推送到远程。一切都是本地的。
【问题讨论】:
不确定是否应该转至SuperUser? 很可能是访问权限的问题(运行 git 的用户没有对所有 repo 的写权限) 在 SO 和 SU 中有关于此的主题。我认为问题在任何一个中都同样有效。 Nevik,repo 的权限是 777,包括./git
文件夹。
你什么时候看到这个问题?是在执行“git mv”还是“git add”时?
【参考方案1】:
你试过'git add。' .会不会全部改变? (你可以通过 git reset HEAD 删除不必要的添加文件)
【讨论】:
【参考方案2】:过去几天我一直遇到同样的问题。基本上,在我不知情的情况下,整个 repo 已被移动到一个新的文件系统,当我尝试运行 git status 时,它突然报告 repo 中的每个文件都已更新。
可能的解决方案
所以,经过大量谷歌搜索,我尝试了以下方法:
更改 .git 权限(相同问题) 更改 .git/index 权限(同样的问题) git 添加所有更改以提交(相同问题) git rm-ing 删除文件,因为它们报告文件名太长错误(同样的问题) git reset (soft|Head|Hard)(同样的问题) git clean(同样的问题) 关闭 Windows Defender(同样的问题) 更新 git(同样的问题) 不同的 git 客户端(我使用 gitbash)(同样的问题) 喝 2 杯咖啡而不是 1 杯(同样的问题)tl:dr - 肮脏的解决方案
设法解决问题的唯一方法是复制索引文件,删除原始文件并重命名副本。
我知道它不是真正的“解决方案”,但现在它神奇地工作>
【讨论】:
发现另一个原因:您可能磁盘空间不足。 就我而言,Google Drive 正在上传(备份)文件,并且在此过程中它们被锁定。上传完成后,提交工作。 感谢您提供有关 Google 云端硬盘的提示。我遇到了同样的问题,但使用的是 Dropbox。 重启对我有用。在一个半空的 22 TB 共享驱动器上工作,所以空间不是问题。 你的“肮脏解决方案”对我有用(返回到以前的索引文件,从那时起重新添加并重新提交所有更改)【参考方案3】:就我而言,磁盘空间不足,因此我不得不从硬盘驱动器中删除文件以腾出空间。
【讨论】:
耶,这么简单...谢谢 如果不是这个答案,我什至都不会检查...但是,是的,它修复了它:D 源代码已满?还是满载而归? (回购) 完整源代码,如果我没记错的话。【参考方案4】:在我的例子中,它是一个并发运行的 EGit。重启 eclipse 后就可以正常工作了。
【讨论】:
问题是“为什么会出现错误消息?”这个答案描述了另一个潜在的原因。【参考方案5】:我碰巧文件 .git/index 正在被另一个进程(我的本地开发 Web 服务器)使用。我关闭了这个过程,然后它就起作用了。
【讨论】:
对我来说也是如此,似乎当您运行 Angular 开发服务器并尝试提交时,会发生此错误【参考方案6】:我在 Mac 上遇到了同样的问题。这似乎是由文件系统 ACL 引起的。尝试chmod -RN /path/to/repo
清除 ACL。完成此操作后,我能够提交更改。使用复制索引文件的技巧,删除原始文件并将副本移回也可以达到相同的效果。
【讨论】:
如果您的用户帐户最近有任何权限问题,可能会导致您遇到此问题。就我而言,这是一个 Active Directory 集成问题,导致我遇到了有问题的 ACL。【参考方案7】:我将 ACL(不知何故)附加到 .git 文件夹中的所有文件。
使用 .git 文件夹中的 ls -le
检查它。
您可以使用chmod -N
(用于文件夹/文件)或chmod -RN
(递归)删除 ACL
【讨论】:
【参考方案8】:如果您使用的是 Windows 机器,请确保您使用的程序(无论是源代码树还是 git 终端)以管理员身份运行。我得到了同样的错误信息。您可以右键单击该程序以管理员身份运行,也可以将其属性更改为始终以管理员身份运行。
【讨论】:
【参考方案9】:如果你在变基期间得到这个:
这很可能是由于某些软件锁定了您的 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
。
【讨论】:
如果创建了新文件或存在一些修改过的内容,请在git rebase --continue
之前使用git reset --hard
。 --hard
具有破坏性,因此请先发送git status
看看哪些内容可能会被删除。【参考方案10】:
就我而言,暂停 Dropbox 同步解决了这个问题
【讨论】:
【参考方案11】:如果您在某种在线同步服务(例如 google drive 或 dropbox)中设置了 github,请尝试禁用同步,因为同步服务会尝试读取/写入文件,因为 github 会尝试执行相同操作,从而导致github 无法正常工作。
【讨论】:
【参考方案12】:空间不足是个问题。清理并重试
【讨论】:
【参考方案13】:错误消息fatal: Unable to write new index file
表示我们无法将新内容写入git index 文件.git\index
(有关git index 的更多信息,请参阅here)。在回顾了这个问题的所有答案后,我总结了以下根本原因:
.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
的进程,然后停止锁定可执行文件。这将解锁.git\index
。
例如,Process Explorer Search 表示.git\index
被vmware-vmx.exe
锁定。暂停 VMWare Player 虚拟机(通过共享文件夹访问 git repo)解决了这个问题。
【讨论】:
虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review @Al,我根据你的建议更新了我的答案。【参考方案14】:关闭 Visual Studio 代码(在我的情况下,它有一个在文件保存时运行的自动上传后台作业)为我解决了这个问题。
解决方案的功劳:我的朋友和同事 Arnel。
【讨论】:
我已经关闭了运行我的 angularJs 应用并且索引已解锁的 nodeJs 服务器【参考方案15】:问题: 当我在 git 中检查一些修改过的文件时,得到了这个错误。 我有两个用户 ABC 和 XYZ。文件的 uid:gid 为 ABC,但它没有 git 访问权限并尝试使用相同的文件签出。
我尝试过的解决方案: XYZ 有 git 访问权限,尝试使用 sudo 签出文件,它成功了..!!
【讨论】:
【参考方案16】:这对我有用:
上下文:
在服务器上构建项目
git status
返回HEAD detached at <commit-SHA>
我在本地进行的任何操作都出现了这个错误。更具体地说:
git 结帐 git reset HEAD --hard解决方案
-
只需删除文件
<work-dir>/.git/index
。
git status
表示项目中的所有文件都没有被跟踪(这并不奇怪)。
git reset HEAD --hard
在执行git status
时返回HEAD detached at <commit-SHA>
,但您应该能够
git checkout <some-branch>
你又回到了正轨!
!!重要!!
这只是因为我正在“愉快地”建造。没有对代码进行任何有价值的修改。如果您实际上处于“开发时间”,那么我建议您先保存您的工作或使用其他方法。
希望它会有所帮助:)。
【讨论】:
【参考方案17】:这对我有用:
rm -f ./.git/index.lock
【讨论】:
【参考方案18】:我在 Windows 上使用 GitExtensions 时遇到了这个问题。通过授予当前用户(我)对包含 repo 的文件夹的完全权限来修复。
另外一次,即使我从 Git 扩展中收到错误,我也能够从 Visual Studio 2015 提交相同的文件。
还有一次我不得不从 .git 文件夹中删除“索引”文件
【讨论】:
【参考方案19】:我的情况有点意思:
我运行 git log 来检查某个提交,然后我没有正确退出它,我按 ctrl+c 退出它。
然后索引似乎被锁定了。所以我再次运行 git log,然后按 Q 退出它。
问题已解决。 :)
【讨论】:
【参考方案20】:我认为某些后台备份解决方案(例如 Google 备份和同步)会阻止对索引文件的访问。我关闭了应用程序,Sourcetree 完全没有问题。似乎 Dropbox 也是如此(@tonymayoral)。
【讨论】:
【参考方案21】:就我而言,解决方案只是向新用户添加权限。
当我安装新操作系统时,我移动了我的存储库,它显示了这个确切的错误,我选择了根文件夹,然后添加了经过身份验证的用户以检查所有
【讨论】:
【参考方案22】:我遇到了同样的问题。我重新启动了计算机,问题得到解决。
【讨论】:
【参考方案23】:在我的例子中,它是一个 nodemon
实例监视文件系统的变化。
【讨论】:
【参考方案24】:我也有/有这个问题。就我而言,没有任何解释适用:
足够的磁盘空间 我有足够的权限,我可以写索引文件,我可以重命名它,我可以创建它,变通方法什么都没做 重启窗口不起作用 索引未被进程锁定直到我发现一旦我通过另一台(linux)计算机访问 windows 文件夹,git 就可以毫无怨言地工作。它一定与我在普通 debian buster 计算机上使用的 git 版本有关:git 1.2.20 给了我“无法写入新索引”错误,而从 ubuntu 模糊虚拟机(git 1.2.2)添加文件没有问题。
【讨论】:
【参考方案25】:使用 sudo 运行对我有用。
例如: sudo git add -r
【讨论】:
这是一个权宜之计的解决方案,只会级联到更多的权限问题。修复权限比充当超级用户简单地将文件添加到索引中要好。【参考方案26】:出于某种原因,从 wsl 终端执行 git add
工作正常。但是崇高的合并总是会给我这个错误。原来VS代码以某种方式阻止了它。关闭 VS 代码使其工作。有人也以同样的方式解决了这个问题 - https://***.com/a/47871586/6236710
【讨论】:
【参考方案27】:安装 Anaconda 后我遇到了同样的问题。我尝试了所有解决方案,例如 permission 和 disk-free。所以,我只是删除了 repo 并再次从远程克隆它。它解决了这个问题。
【讨论】:
【参考方案28】:我再次运行了提交,它成功了....
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%)
【讨论】:
以上是关于Git'致命:无法写入新的索引文件'的主要内容,如果未能解决你的问题,请参考以下文章
Git 克隆失败 - 致命:远程端意外挂断。致命:早期 EOF 致命:索引包失败
错误:无法创建符号链接,致命:无法将索引文件重置为修订版“HEAD”