构建树错误时出错会阻止提交分支

时间:2014-07-28 05:39:49

标签: git version-control

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

工作副本“app name”无法提交文件 错误:无效对象100644
888688965 ... for“Supporting Files / animage.png”
错误:构建树时出错

我搜索了Interwebs的解决方案,发现this question似乎是同一个问题。我尝试了这个问题的两个答案,但都没有为我解决问题。我已经做了我能想到的所有事情来解决问题,但没有成功。

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

工作副本“app name”无法提交文件 致命的:无法阅读树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

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

此时我愿意做任何事情来防止不得不废弃整个git存储库并重新开始。我不想失去我的分支和历史。 如何解决此问题?我有一个项目目录的工作副本,与我第一次发现错误以及此项目的整个历史记录的Time Machine备份时完全相同。你能提出的任何建议都表示赞赏。

2 个答案:

答案 0 :(得分:1)

一个解决办法是:

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

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

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

答案 1 :(得分:1)

你改变了git版本吗?您是否只使用Xcode附带的那个,或者您在终端中安装了过时的版本?一个可能破坏回购的人。 (尝试' git --version' - current version是2.0.4,并且可以使用自制软件轻松安装。

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