Git 子模块校验错误 : "fatal: reference is not a tree"

标签 git git-submodules

引用问题https://github.com/drmeister/clasp/issues/98

要重现,请执行以下操作:

git clone git://github.com/drmeister/clasp claspcl
cd claspcl
git checkout tags/0.3-test-3
git submodule update --init

结果是:

git submodule update --init
Submodule 'updatedAsdf' (https://github.com/drmeister/asdf.git) registered for path 'src/lisp/kernel/asdf'
Submodule 'src/lisp/kernel/contrib/sicl' (https://github.com/drmeister/SICL.git) registered for path 'src/lisp/kernel/contrib/sicl'
Submodule 'src/mps' (https://github.com/Ravenbrook/mps-temporary) registered for path 'src/mps'
Cloning into 'src/lisp/kernel/asdf'...
remote: Counting objects: 13416, done.
remote: Total 13416 (delta 0), reused 0 (delta 0), pack-reused 13416
Receiving objects: 100% (13416/13416), 5.34 MiB | 838.00 KiB/s, done.
Resolving deltas: 100% (9935/9935), done.
Checking connectivity... done.
Submodule path 'src/lisp/kernel/asdf': checked out 'dcd692a8f9f6a5cb86133123e1c433a9afb4e7e9'
Cloning into 'src/lisp/kernel/contrib/sicl'...
remote: Counting objects: 49356, done.
remote: Total 49356 (delta 0), reused 0 (delta 0), pack-reused 49356
Receiving objects: 100% (49356/49356), 8.49 MiB | 298.00 KiB/s, done.
Resolving deltas: 100% (37020/37020), done.
Checking connectivity... done.
fatal: reference is not a tree: 280c12ab49223c64c6f914944287a7d049cf4dd0
Cloning into 'src/mps'...
remote: Counting objects: 25250, done.
remote: Total 25250 (delta 0), reused 0 (delta 0), pack-reused 25250
Receiving objects: 100% (25250/25250), 86.87 MiB | 831.00 KiB/s, done.
Resolving deltas: 100% (15851/15851), done.
Checking connectivity... done.
Submodule path 'src/mps': checked out '3e6640e7eeb5d086adec18e6227a84da59898e1c'
Unable to checkout '280c12ab49223c64c6f914944287a7d049cf4dd0' in submodule path 'src/lisp/kernel/contrib/sicl'

如您所见,复制配方没有触及 sicl 子模块。所以,我最好的猜测是 clasp Git 存储库在其中某处有一个对 280c12ab49223c64c6f914944287a7d049cf4dd0 的虚假引用。 #git 上的人们似乎也认为这是合理的。如您所见,复制配方没有触及 sicl 子模块。那么,如何最好地解决这个问题呢? clasp Git 仓库需要做什么样的手术?

注意:如果没有 git checkout tags/0.3-test-3 步骤,问题不会出现。所以问题大概出在那个特定的分支,这里是 fixnum.

最佳答案

我按照您的说明进行操作,并且能够重现该问题。
这不是你做的,对象 280c12ab49223c64c6f914944287a7d049cf4dd0 已损坏,您无法修复它。

我设法做了一个解决方法并获得了 master 的内容:

git show 280c12ab49223c64c6f914944287a7d049cf4dd0
(will display bad object)
cd sicl
git checkout clos
git branch -d master
git fetch --all --prune
git checkout master
git fsck

在上述步骤之后 git show 280c12ab49223c64c6f914944287a7d049cf4dd0 仍然显示坏对象(因为它在原始存储库中有问题)

但更奇怪的是 git fsck 没有发现任何错误,我将在今天晚些时候进行调查。

至于现在,解决方法将使您能够继续工作。

关于Git 子模块校验错误 : "fatal: reference is not a tree",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30348615/

相关文章:

node.js - 如何从远程计算机在我的家庭计算机上执行 git 命令( pull 、推),而无需在客户端安装软件?

git - 如何将 git 存储库用作 svn :external?

git - 如何在不提供用户名/密码的情况下推送对 git 子模块的修改

Git 子模块 : Move submodule outside repository

git - 特定 c# 项目更改时的 TeamCity 触发器构建

git - 如何在 emacs 中禁用 vc-git?

Git checkout 分支并修剪与先前 checkout 相关的所有内容(包括 git-lfs 保留)

java - git:将现有存储库拆分为子模块

git - 你如何在 git 中 bundle 子模块的变化?

git - .gitignore 和删除缓存使得我看不到服务器上的文件?