克隆git-re时出错

克隆git-re时出错,git,version-control,repository,git-submodules,git-checkout,Git,Version Control,Repository,Git Submodules,Git Checkout,所以我参与了这个项目,使用git 我们参考了大量的源文件和一些库。LIB作为子模块(如BulletPhysics)放入git中,我们的团队不得更改 根据墨菲定律,这一变化已经发生,伴随着提交/推送,似乎没有任何影响 。。。直到有人失去了本地回购协议,不得不重新克隆。好吧,所有发生的事情都是项目的某个部分被实际下载,但当涉及到bullet时,所有发生的事情都是 Unable to checkout 'cc1b481c8ec2868595db30303d88bd12bc1bcf2a' in subm

所以我参与了这个项目,使用git

我们参考了大量的源文件和一些库。LIB作为子模块(如BulletPhysics)放入git中,我们的团队不得更改

根据墨菲定律,这一变化已经发生,伴随着提交/推送,似乎没有任何影响

。。。直到有人失去了本地回购协议,不得不重新克隆。好吧,所有发生的事情都是项目的某个部分被实际下载,但当涉及到bullet时,所有发生的事情都是

Unable to checkout 'cc1b481c8ec2868595db30303d88bd12bc1bcf2a' in submodule path 'extern/bullet'
我们的主管告诉我们,它已被试图更改bullet的提交/推送操作破坏,我们无权这样做,他不知道如何修复此问题

谁能在不评判他的情况下帮我解决这个问题

尊敬的阿尔德尔,我找到了解决办法:

(网络上的多个来源结合在一起。请随意添加您自己的评论。)

首先,转到终端中的子模块文件夹。在我的例子中,/path/to/../project/extern/bullet。在此处执行以下命令

cd /path/to/.../project/extern/bullet
使用“git log”,查找上次有效提交的sha id。在我的例子中,是“cc1b481c8ec2868595db30303d88bd12bc1bcf2a”之前的那个。正如您可能猜到的,它是“c2720237e96e126dddb37f0496242d3adbf31ab0”。这是应该解决的问题:

git reset --hard c2720237e96e126dddb37f0496242d3adbf31ab0
git submodule init
git submodule update
cd /path/to/.../project
git add extern/bullet
git commit
git push
到目前为止,回购协议的运作与预期相符

致以最良好的祝愿,
LDericher

您应该检查克隆存储库的子模块。子模块存储库是否存在于
.gitmodules
中的指定位置?这些存储库中是否存在引用的提交,即
extern/bullet
的存储库中的
cc1b481c8ec2868595db30303d88bd12bc1bcf2a
?我应该如何检查?在我的本地工作副本中或通过ssh连接到git服务器?
.gitmodules
文件应该存在于本地克隆(以及远程克隆)中。{.gitmodules}文件存在于我的本地副本和远程repo中,尽管我找不到对指定提交的任何引用。我查看了.git/objects,找到了对extern/bullet的无效提交。它们由89301E760119F40EF2077C2F41B0966B66F70FD、dcabd79df2a73661cd101000b5bbd63a76cdf81b和ee082ffc4ac537bf141ee2562e0d79a9612eb8b1标识。有没有一种方法只需触摸extern/bullet就可以重新滚动这些提交?您所说的“有效”提交是什么意思?
cc1b481c8ec2868595db30303d88bd12bc1bcf2a
是否存在?如果是这样,您应该检查您的存储库(可能还有文件系统)是否损坏(请参阅)。最后一次“有效”提交是cc1b481c8ec2868595db30303d88bd12bc1bcf2a之前的最后一次提交,它仅存在于外部/bullet下的git日志中。此cc1b…-提交确实导致了问题中的错误。”不过,git fsck确实发现了一些错误。“悬挂的blob/commits/trees”和它们的sha校验和。其中没有一个是臭名昭著的校验和,而“悬空”通常有点令人不安。