2012-12-19 128 views
1

所以我参加这个项目,使用git。错误克隆git re

有一堆源文件和我们提到的一些库。这些库作为子模块(例如BulletPhysics)被放入git中,并且不会被我们的团队修改。

根据墨菲定律,这种改变已经发生,连同提交/推,这似乎并未有任何影响......

...直到一些人失去了他的本地回购,不得不重新-克隆。那么,发生的是该项目的某些部分被实际下载,但是当涉及到子弹,所发生的一切是

Unable to checkout 'cc1b481c8ec2868595db30303d88bd12bc1bcf2a' in submodule path 'extern/bullet' 

我们的主管告诉我们它已经被提交/推行动打破(S)试图改变子弹,我们没有权利这样做,并且他不知道如何解决这个问题。

有没有人可以帮我解决这个问题而不判断他? 。;)

问候,lder连续

+0

您应该检查克隆库的子模块。子模块存储库是否存在于'.gitmodules'中的指定位置?并且这些存储库中是否存在引用的提交,即'extern/bullet'的存储库中的'cc1b481c8ec2868595db30303d88bd12bc1bcf2a'? – Koraktor

+0

我应该如何检查?在我的本地工作副本中,或通过ssh进入git服务器? – LDericher

+0

'.gitmodules'文件应该出现在你的本地克隆(和远程文件)中。 – Koraktor

回答

0

我找到了解决办法:

(网络上的一些资源,加之随意添加自己的评论)

第一,去子模块文件夹在终端。在我的例子中,/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

+0

“有效”提交意味着什么? 'cc1b481c8ec2868595db30303d88bd12bc1bcf2a'存在吗?如果是这样,你应该检查你的仓库(也可能是文件系统)是否有损坏(参见['git-fsck'](http://git-scm.com/docs/git-fsck))。 – Koraktor

+0

最后一个“有效”提交是cc1b481c8ec2868595db30303d88bd12bc1bcf2a之前的最后一个,它只存在于extern/bullet下的git log中。这个cc1b ...-提交确实会导致有问题的错误。但是,'git fsck'确实发现了一些错误。 “晃来晃去的斑点/提交/树木”和他们的校对。他们中没有一个是臭名昭着的校验和,而“晃来晃去”通常有点令人不安。 – LDericher