【问题标题】:git - error: addinfo_cache failed for path 'file'git - 错误:路径“文件”的 addinfo_cache 失败
【发布时间】:2018-01-03 15:11:41
【问题描述】:

当我尝试将 git 中的任何分支合并到 master 中时,我得到 error: addinfo_cache failed for path 'file'

我做什么:

>git checkout master
>git merge other-branch

Git 给了我:

error: addinfo_cache failed for path 'file'
file: unmerged (581c47f7d0e1a0bc825d528d9783ac18ee0cce27)
file: unmerged (26a0c24dccd2bc2f74e20488ca01bba2fcd9cf56)
file: unmerged (3be471ca5c689693339827a455f187814677642f)
fatal: git write-tree failed to write a tree

>git status 产生:

On branch master
Your branch is up-to-date with 'origin/master'.
Unmerged paths:
  (use "git reset HEAD <file>..." to unstage)
  (use "git add <file>..." to mark resolution)

        both modified:   file

no changes added to commit (use "git add" and/or "git commit -a")

我不知道该怎么做,也找不到任何问题。

【问题讨论】:

  • add_cacheinfo failed for path ... 是一个内部错误,不应发生。 Git 内部的某些东西坏了,或者你的计算机内部的某些东西坏了/失败了。如果问题在另一台计算机上仍然存在,则表明这是您使用的任何版本的 Git 中的错误;您可以尝试使用不同版本的 Git。
  • 我刚在家里的电脑上测试过,没有问题。我将在工作中删除整个.git 文件夹。希望能解决它。
  • 删除 .git 并克隆它新的解决了这个问题。谢谢。你想写你的评论作为答案,那么我会接受它。
  • 嗯,还是很神秘。这不是修复,而是一种解决方法。 :-) 实际问题和正确的解决方法仍然未知......
  • OK 认为该消息只是表明存储库已损坏。非常感谢您的帮助。

标签: git merge


【解决方案1】:

当您更改了 core.autocrlf 配置选项但尚未删除并重新签出您的工作树时,可能会发生此错误。

因此,要么将 core.autocrlf 改回原来的样子,要么推送您的更改,删除您的存储库并再次克隆它。

【讨论】:

  • 这需要更多的支持!我只是删除了我的工作树(但显然不是.git 目录),并对我需要挑选的分支进行了硬重置并且它起作用了。
  • 在调用合并之前删除有问题的本地文件对我有用。
【解决方案2】:

对我来说解决方案非常简单。之后:

$ git pull
error: add_cacheinfo failed to refresh for path 'file'; merge aborting.

我执行了以下简单操作:

$ rm file  # delete the failed file, or rename it if you want to keep it
$ git checkout file  # git recreates the file
$ git pull
From [server].com:[org]/[repo]
 * branch                [branch] -> FETCH_HEAD
Merge made by the 'recursive' strategy.
# success!

【讨论】:

    【解决方案3】:
    1. 您是否尝试先通过运行 git mergetool 来解决“文件”上的冲突,然后将“其他分支”合并到 master 中?
    2. 或者,如果您不关心对此“文件”的本地更改,那么您可以将其重置为远程分支git reset --hard origin/master,然后执行git merge other-branch

    【讨论】:

    • 1.没有冲突,我没有使用git mergetool。 2.我试过你建议的git reset --hard origin/master,完全没有效果。似乎torek 的评论是正确的,并且存储库不知何故坏了。我删除了所有内容并从另一台机器克隆了它,它现在似乎可以工作了。
    【解决方案4】:

    我最近在摘樱桃时使用 2.18.0.windows.1 git 版本遇到了这个错误。受影响的文件甚至与更改无关。尝试了此线程中的所有答案,尝试禁用 fscache 并将 git 升级到 2.21。终于通过以下方式解决了这个问题:

    1. 删除受影响的文件
    2. 使用git reset --hard origin/master 重置状态(如果没有第 1 步,此操作无效)

    【讨论】:

      【解决方案5】:

      我尝试编辑上述答案,但似乎没有进展...在查看您的评论 https://stackoverflow.com/users/6950750/derweh 后,删除回购是绝对最后采取。当古怪的事情似乎发生如上述。我发现最好的办法是重置为具有相当数量增量的过去提交,然后检出您需要的分支。

      git reset HEAD~10 --hardgit checkout some-other-branch

      紧随其后

      git checkout name-of-your-branch

      执行此操作后,您的工作分支通常会再次工作。

      【讨论】:

        【解决方案6】:

        就像其他人已经说过的那样,这绝对是 autocrlf 的东西。 但从那以后我就一直禁用它。

        有时,如果同事或任何工具(如 mergetool 或 repo-frontend(如 gitlab、tfs、github)在文件中(例如在拉取请求中)摆弄行尾)就足够了。

        简单的本地修复: - 删除所有代码文件 - 让 git 重新生成它认为正确的所有文件

        因此,将您的工作区/存储库保留在 .git 文件夹中,但删除所有其他文件。

        示例(所有代码都在 src 中)

        rm -rf ./src
        git reset --hard .
        

        【讨论】:

          【解决方案7】:

          当我遇到此错误时,我只是将受影响的文件夹移动到存储库外的另一个目录中,执行合并,推送更改,将受影响的文件夹移回,提交并再次推送。

          由于有两个文件夹受到影响,我不得不一个一个地移动它们,因为 git 在第一次尝试时没有通知我第二个。

          这不是一个好的解决方案,但它无需重置或对存储库或 git 进行任何其他更改即可工作(我正在使用 git-extensions)。

          【讨论】:

            【解决方案8】:

            我在与“git version 2.23.0.windows.1”合并时遇到了同样的问题。
            在 Cygwin 下使用“git version 2.17.0”运行相同的合并命令有效。

            以上建议都没有帮助到我(甚至没有对 repo 进行新的克隆)。

            【讨论】:

              【解决方案9】:

              Git 版本也有同样的问题: git version 2.28.0.windows.1

              合并一个分支会在随机文件上产生错误error: add_cacheinfo

              我找到的解决方案是删除我的 .gitattributes -> commit -> push -> re-merge。

              【讨论】:

                【解决方案10】:

                我发现的另一个解决方法是在合并之前手动签出并将文件添加到分支。如果我在一个功能分支中并且想要将 master 合并到该分支中,则合并中止并出现错误

                error: add_cacheinfo failed to refresh for path 'a/b/c'; merge aborting.
                

                要解决这个问题,首先从工作目录中清除中止合并的剩余部分

                git stash && git clean -fd
                

                然后,检出有问题的文件并在合并之前将它们提交到目标分支:

                git checkout master — a/b/c
                git add a/b/c
                git commit -m “Add file that prevents merging”
                

                之后,合并应该会起作用(如果另一个文件触发相同的错误,您可能需要重复上一步):

                git merge master
                

                【讨论】:

                • 您应该指出git clean 将删除未跟踪的文件!如果有人只是复制粘贴您的命令,那就太糟糕了!
                【解决方案11】:

                我在使用custom merge driver 时遇到了这个错误。我基本上按照手册中的说明设置了合并驱动程序:

                .git/config

                [merge "foo"]
                    name = foo merge driver
                    driver = foo.py %O %A %B %L %P
                    recursive = binary
                

                .git/info/attributes

                *.txt merge=foo
                

                正如医生所说,

                合并驱动程序应将合并的结果留在 通过覆盖以 %A 命名的文件,

                还有

                合并驱动程序可以学习合并结果所在的路径名 将通过占位符 %P 存储。

                我认为如果将结果写入%P 就可以了,所以我在foo.py 中写道:

                with open(sys.argv[5], 'w') as f:
                    f.write(some_str)
                

                sys.argv[5]%P。结果,发生了错误。文件内容确实按预期合并,但文件既没有暂存也没有提交。进程被错误中断。

                然后我修改了foo.py

                with open(sys.argv[2], 'w') as f:
                    f.write(some_str)
                

                sys.argv[2]%A。这样,错误就消失了,合并按预期成功。

                【讨论】:

                  【解决方案12】:
                  git merge <some_branch>
                  

                  我认为这可能是面临问题的地方(合并另一个分支时)。

                  我可以按照以下步骤解决问题:

                  1. git merge &lt;some_branch&gt;这里你会看到错误
                  2. git status 应该为您提供要合并的更改。
                  3. git commit .git push 推送更改。
                  4. 现在您可以执行git merge &lt;some_branch&gt;,删除/存储合并前建议的任何文件。您现在不会发现错误。
                  5. 提交并推送更改。

                  【讨论】:

                    【解决方案13】:

                    尝试将远程分支合并到本地存储库时出现此错误。当我拉下遥控器并重新尝试合并时,它工作正常。

                    它可能也与core.autocrlf有关,我最近更改了它,但我能够在本地合并。

                    【讨论】:

                      猜你喜欢
                      • 2013-04-13
                      • 1970-01-01
                      • 2014-10-29
                      • 2022-07-14
                      • 2018-09-01
                      • 2013-04-27
                      • 2017-06-04
                      • 2021-09-08
                      • 2017-03-14
                      相关资源
                      最近更新 更多