You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Yocto BB配方中git subrepo的SRC_URI与SRCREV配置方法

Yocto BitBake 配方对接本地Git子仓库配置方法

正确配置SRC_URI拉取本地子仓库提交

之前使用的SRC_URI = "git://${TOPDIR}/../repos/lib-repo/;protocol=file"配置无法拉取本地提交,本质是git://前缀搭配file协议时,BitBake的Git抓取器默认读取仓库远程引用,不会识别本地分支未推送的提交,且缺少必要的参数声明。

配置前先确认:子仓库内的代码修改必须已通过git commit提交到本地分支,工作区未暂存、未提交的修改受Git本身机制限制,无法被任何配置拉取到构建流程中。

正确的SRC_URI配置如下:

SRC_URI = "git://${TOPDIR}/../repos/lib-repo;protocol=file;nobranch=1;usehead=1"

参数说明:

  • protocol=file:强制使用本地文件协议访问仓库,跳过网络请求
  • nobranch=1:关闭分支名校验,允许直接拉取本地仓库当前所在分支的提交,无需配方硬编码匹配分支名
  • usehead=1:直接指向本地仓库当前HEAD对应的提交,不强制要求提前指定提交哈希

路径校验技巧:如果怀疑相对路径写错,可以在配方中加一行bbnote "local repo path: ${TOPDIR}/../repos/lib-repo",执行构建时会在日志中打印解析后的绝对路径,确认路径是否指向正确的子仓库位置。


自动获取本地最新提交哈希作为SRCREV取值

根据开发阶段和正式发布阶段的不同需求,有两种常用配置方式:

  • 开发调试阶段(免手动更新哈希)
    直接在配方中配置SRCREV = "${AUTOREV}",配合上面的SRC_URI参数,BitBake会在每次构建时自动读取本地子仓库当前HEAD的哈希值,只要本地子仓库有新的提交,构建时会自动识别变更、重新拉取代码,不需要手动修改配方里的哈希值,也不需要提前把提交推送到远程仓库。
    如果遇到缓存导致代码不更新的问题,执行bitbake -c cleansstate <对应配方名>清除该配方的构建缓存后重新构建即可。

  • 需要固定关联本地提交的场景
    如果不想用AUTOREV每次自动解析,可以在配方中加一段简单的Python函数动态读取本地子仓库的HEAD哈希,配置如下:

    def get_local_repo_rev(d):
        import subprocess
        repo_path = d.expand("${TOPDIR}/../repos/lib-repo")
        ret = subprocess.run(
            ["git", "-C", repo_path, "rev-parse", "HEAD"],
            capture_output=True,
            text=True
        )
        return ret.stdout.strip() if ret.returncode == 0 else "${AUTOREV}"
    
    SRCREV = "${@get_local_repo_rev(d)}"
    

开发完成后正式发布版本时,直接在子仓库目录执行git rev-parse HEAD拿到当前提交哈希,替换掉SRCREV的动态取值,再把子仓库的提交推送到对应远程仓库即可。主仓库提交时会自动记录子仓库的关联状态和提交哈希,仓库关联关系完全由Git维护,不需要额外手动同步。


内容的提问来源于stack exchange,提问作者Juno

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 20:51:09