【问题标题】:git problem : fatal: Unable to write new index filegit问题:致命:无法写入新的索引文件
【发布时间】:2011-04-18 08:33:34
【问题描述】:

我有一个在 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 访问权限...

【问题讨论】:

    标签: git macos


    【解决方案1】:

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

    如果您有写入权限,您似乎发现了一个错误。您可以尝试恢复

    1. 从您当前的工作副本创建一个克隆
    2. 从克隆的工作副本中删除所有文件
    3. 将所有 wc 文件从当前工作副本复制到克隆(不要复制 .git)
    4. 尝试在克隆中提交某些内容。

    当最后一步工作时,您需要将远程分支从当前存储库设置到克隆,然后您可以将克隆的存储库用作新的工作副本。

    【讨论】:

    • 鲁迪几乎肯定是对的。即使您的旧机器和新机器上的帐户的 name 相同,这也不是 OS X 所关心的,重要的是 UID。就像 Rudi 建议的那样,看看你是否可以在不需要 sudo 的情况下对 .git/config 之类的文件进行更改。如果你不能(我怀疑是这种情况),那么解决方案可能只是 sudo chown 一切都给你的新用户。
    • 我最近买了一台新的 Mac Book,并通过 NAS 在我的家庭网络上拥有了我的 git 存储库。我得到了几乎相同的错误。致命:存储库已更新,但无法写入 new_index 文件。检查磁盘未满或未超过配额,然后“git reset HEAD”进行恢复。 MacBook-Pro:Wasted Time account$ git reset HEAD 错误:无法写入新的索引文件。致命:无法将索引文件重置为修订版“HEAD”。 MacBook-Pro:Wasted Time account$ 你能确认这是同样的错误吗?如果是这样,我是否需要创建一个全新的存储库?
    【解决方案2】:

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

    【讨论】:

    • 我在 VirtualBox 下遇到了同样的问题,我的文件系统未满。 Dropbox 是答案有点令人沮丧,但我找不到更好的解决方案。
    【解决方案3】:

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

    【讨论】:

    • WinDirStat 是我个人最喜欢的文件系统使用。 WinDirStat.info
    • 链接失效
    • 我遇到了同样的问题。 sudo du -h --max-depth=1 在这里和那里找到大文件。原来我的下载量太大,所以我删除了它们。固定
    【解决方案4】:

    我遇到了类似的问题。 “git reset --hard”对我有用。

    【讨论】:

    • 你还应该提到 git reset 的副作用。您将丢失所有未提交的/本地更改。
    【解决方案5】:

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

    【讨论】:

      【解决方案6】:

      我在使用 SFTP 网络驱动器(免费)时遇到了类似的问题。解决方法是:在 SFTP 网络驱动器的 Profile Settings 中填写 chekcbox “Delete existing target before move”。

      【讨论】:

        【解决方案7】:

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

        如果你正在克隆一个 git 存储库,其中包含另一个 git 存储库(不是子模块),你会得到这种行为。

        希望对某人有所帮助。

        【讨论】:

          【解决方案8】:

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

          【讨论】:

            【解决方案9】:

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

            【讨论】:

              【解决方案10】:

              我有同样的问题。我仍然不知道原因,但我的解决方法是删除 index.lock sudo rm -f index.lock,然后我给了 index sudo chmod 777 index 的写权限。在此之后,我能够上演并提交。问题是我几乎每次有事情要做时都必须这样做。

              【讨论】:

                【解决方案11】:

                这是旧的,但我的原因是 Dropbox。我的本地存储库存储在我的 Dropbox 文件夹中,我必须暂停 Dropbox 同步才能完成命令。

                【讨论】:

                  【解决方案12】:

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

                  【讨论】:

                    【解决方案13】:

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

                    【讨论】:

                      【解决方案14】:

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

                      我发现原因是我的磁盘已满。我从中删除了其他东西,然后我的 git repo 恢复并再次工作。

                      【讨论】:

                        猜你喜欢
                        • 2013-04-10
                        • 2014-10-25
                        • 1970-01-01
                        • 2020-08-20
                        • 1970-01-01
                        • 1970-01-01
                        • 2017-10-14
                        • 2013-05-12
                        • 1970-01-01
                        相关资源
                        最近更新 更多