如何在Yocto中递归地克隆带有子模块的git仓库

11

是否有其他方法可以克隆Bitbake配方文件中的所有依赖文件夹(类似于使用recursive标签)?我目前的做法如下:

SRC_URI="git://[uri_a];...;name=a \
     git://[uri_b];...;destsuffix=git/a/b;name=b \
     git://[uri_c];...;destsuffix=git/a/b/c;name=c"

其中“b”和“c”是“a”的子模块。

3个回答

18

谢谢David。但是在将工作的SRC_URI="git://"替换为"gitsm://"并进行模块bitbaking后,我遇到了以下错误:错误:功能失败:Fetcher失败:提取命令退出代码为1,输出: cp:无法将'/home/ram/yocto/build/downloads/git2/github.com.Azure.azure-iot-sdks.git/modules'状态在此文件或目录中找不到 - Ram Prasad
@RamPrasad 如果您没有在您的配方上运行bitbake clean,请这样做。将SRC_URI从“git://”切换到“gitsm://”需要这样做。 - Jussi Kukkonen
@jku,我在文档中读到了这个,并在烹饪食谱之前运行了“bitbake -c clean recipe”。忘记在评论中提到了:( - Ram Prasad
1
URL不再有效。 - parsley72

9

在尝试使用gitsm无果后,我手动将获取子模块的步骤添加到了配置步骤之前:

do_configure_prepend() {
  cd ${WORKDIR}/git
  git submodule update --init --recursive
}

注:适用于gitsm的相同限制,即:
Git子模块获取器不是完整的获取器实现。该获取器存在已知问题,它无法正确地使用正常的源镜像基础设施。此外,它获取的子模块源代码对许可和源代码存档基础设施不可见。

1
你有什么想法,为什么在尝试你的解决方案时会出现访问错误?git@gitlab.com: 权限被拒绝(publickey,keyboard-interactive)。 致命错误:无法从远程存储库读取。``` - Chris
2
这是预期的 - 实际上这就是 gitsm:// 存在的原因。在源获取期间,yocto 使更多的环境可用,允许访问您的 ssh-agent。在“构建”步骤中,环境非常受限。gitsm:// 应该是��决方案 - 直到最近它一直在为我们工作 - 您对 gitsm:// 有什么问题? - Greg

2

根据上面(来自mr_georg)的描述,在大多数情况下都有效,但在一个qt5应用程序的配方中失败了。通过以下修改,该配方得以工作:

do_configure_prepend() {
  cd ${WORKDIR}/git
  git submodule update --init --recursive
  cd -
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接