2017-02-23 22 views
10

我有一个git回购有另一个作为submodule依赖项。在我的项目的根(其中.git.gitsubmodules等都是)我叫为什么git无法为给定的提交获取特定的有效子模块,以及如何解决它?

git submodule update 

这失败,出现以下消息:

子模块路径“的src /框架”牵强,但它不包含cc8c38e9d853491c672452d8dbced4666fc73ec8。直接提交该提交失败。

其中src/framework是我的项目(PROJECT_ROOT/src/framework)的子目录,应该是第三方回购登陆的地方。给定的提交散列是有效的。

我也试过git clone --recursive <my-repo>但它也失败了。

.gitsubmodules内容是

[submodule "src/framework"] 
     path = src/framework 
     url = [email protected]:gh/framework.git 

此外,我必须注意以下重要事实:由于framework回购我的代码中断最近的更新,因此我真的需要检索特定版本它的地方工作正常。

+0

*给定​​的提交散列是有效的。*你的意思是提交该散列存在于子模块回购? – Leon

+0

是的,我可以在我的网页浏览器(使用GitLab)的页面中查看该提交发生的所有更改,因此它不像某人进行某种重置。 – rbaleksandar

+0

这可能是一个权限问题。你可以克隆子模块回购? – Leon

回答

7

是的,我可以按照链接在网页浏览器(使用GitLab)

你可以克隆回购,虽然,与提交包括在内?
GitLab有permission level这将限制访问,所以请确保您的git克隆命令是由正确的用户执行的,并使用上述user home directory/.ssh中的ssh密钥执行。

如果您无法自己克隆子模块回购(位于本地硬盘驱动器上的任何地方),那可以解释错误消息。

问题来自于某人在我正在使用的存储库中的某个子模块之前将头重置为提交之前的提交。这使参考无效。我不知道如何解决这一问题

可以make sure the submodule follows a branch(这里,例如,master):

cd /path/to/parent/repo 
git config -f .gitmodules submodule.bar1.branch master 

然后在最后获取的更新子模块提交master

git submodule update --remote 

--remote option确保它将而不是使用超级项目的已记录SHA-1来更新子模块,但会改为使用子模块的远程跟踪分支的状态。

这将避免“did not contain cc8c38e9d853491c672452d8dbced4666fc73ec8”错误消息。

相关问题