【问题标题】:Error building trees error prevents committing to branch错误构建树错误阻止提交分支
【发布时间】:2014-08-18 17:40:57
【问题描述】:

我的 Mac 上有一个由 Xcode 管理的本地 git 存储库。我最近创建了一个新分支,并从那时起进行了很多更改。我正要对这个新分支执行第一次提交,但出现了一个错误对话框:

工作副本“应用名称”未能提交文件。
错误:无效对象 100644
888688965... 用于“支持文件/animage.png”
错误:构建树时出错

我在 Internet 上搜索了解决方案,发现 this question 似乎是同一个问题。我尝试了这个问题的两个答案,但都没有为我解决问题。我已经尽我所能解决问题,但没有成功。

  • 我尝试按照答案建议查找有问题的文件,但 /repo/.git/objects/88 中没有文件。我还查看了备份(我有 Time Machine 每小时备份),但该文件夹中从来没有文件。
  • 我尝试了git reset --hard 并删除了未提交的更改,但这样做之后我无法提交简单的更改。显示完全相同的错误消息。
  • 我试图删除错误消息中引用的图像,但下次我尝试提交相同的错误时显示引用不同的图像。删除所有图像后,它开始列出代码文件。
  • 我尝试创建一个新分支并提交到该分支,但出现了同样的错误。
  • 我切换到我之前在该项目上工作的另一个分区(文件通过 Dropbox 同步,这可能是问题的原因)并尝试提交,但遇到相同的错误消息。
  • 我最终决定将整个项目恢复到更早的时间点,我在两个月前甚至还没有做任何分支之前就回去了,但仍然一个简单的提交拒绝工作。这让我相信涉及外部因素,项目文件夹之外的东西。我知道它当时有效,所以这让我很困惑。这是出现的错误:

工作副本“应用名称”未能提交文件。
致命:无法读取树 781d...

运行git fsck --full 后,我看到树上有几个断开的链接、很多悬空的斑点、几个缺失的斑点和两棵缺失的树。

git for-each-ref --format='%(refname)' | while read ref; do git rev-list --objects $ref >/dev/null || echo "in $ref"; done 的结果:
致命:缺少 blob 对象 '8886889658056c4ce52d46a485933c8df7a4de84'
在 refs/heads/UniversalStoryboard
致命:缺少 blob 对象 '8886889658056c4ce52d46a485933c8df7a4de84'
在 refs/heads/Update1
致命:缺少 blob 对象 '8886889658056c4ce52d46a485933c8df7a4de84'
在 refs/heads/iOS-8-Update
致命:缺少 blob 对象 '8886889658056c4ce52d46a485933c8df7a4de84'
在 refs/heads/master

尝试克隆 repo 后,记录如下:
错误:无法读取 appname/Images.xcassets/AppIcon.appiconset/Icon-Small-1.png (86672e7aa0d5ad36563feef30c15a5d31f921802) 的 sha1 文件
错误:无法读取 appname/Images.xcassets/AppIcon.appiconset/Icon-Small.png 的 sha1 文件 (86672e7aa0d5ad36563feef30c15a5d31f921802)
错误:无法读取 appname/Images.xcassets/LaunchImage.launchimage/DefaultPortrait@2x.png (7d97eba35cf392ddb1a705109b721fcd6a20ea29)
的 sha1 文件 错误:无法读取 appname/appname-Prefix.pch 的 sha1 文件 (82a2bb45076d290ce7461b28d5a579e649777779)
致命:无法签出工作树
警告:克隆成功,但结帐失败。

此时我愿意做任何事情来避免不得不丢弃整个 git 存储库并重新开始。我不想失去我的分支和历史。 我该如何解决这个问题? 我有一个与我第一次发现错误时完全相同的项目目录的工作副本以及该项目整个历史的 Time Machine 备份。感谢您提出任何建议。

【问题讨论】:

    标签: git version-control


    【解决方案1】:

    一种解决方法是:

    • 恢复到命令行。
    • 克隆您当前的存储库
    • 尝试在该克隆上创建新分支/新提交。

    如果您之前推送过您的存储库,请尝试克隆远程存储库而不是本地存储库。
    或者尝试将 repo 克隆为由 Time machine 保存。

    如果这不起作用,您有一个broken repo,您可以尝试“Tree contains duplicate file entries”中公开的一些方法。

    【讨论】:

    • 我尝试了克隆,虽然它成功了,但结帐却失败了。请参阅已编辑的问题。
    • @Joey 所以stackoverflow.com/a/24868719/6309 的方法之一应该会有所帮助
    【解决方案2】:

    你改变了 git 版本吗?你只使用 Xcode 附带的那个,还是你在终端中安装了一个过时的版本?一个可能会破坏回购。 (试试 'git --version' - current version 是 2.0.4,使用自制软件很容易安装)。

    repo 文件夹中是否有任何奇怪的权限阻止 git 工作?

    【讨论】:

    • 不应与权限相关。我目前使用的是 Xcode 6 beta 5 附带的版本。 git version 1.9.3 (Apple Git-50)
    猜你喜欢
    • 2017-04-12
    • 2019-12-03
    • 1970-01-01
    • 1970-01-01
    • 2013-10-14
    • 1970-01-01
    • 1970-01-01
    • 2018-09-09
    • 1970-01-01
    相关资源
    最近更新 更多