如何在Yocto中为Git标签设置SRCREV?
解决BitBake拉取Git特定标签的SRCREV配置问题
错误原因分析
你遇到的两个核心错误都是因为版本指定方式冲突或者不符合BitBake的Git拉取规则:
- 同时在
SRC_URI中指定tag参数,又单独设置SRCREV为提交哈希:BitBake会认为这是两个冲突的版本指定,只能二选一。 - 将标签名直接赋值给
SRCREV:BitBake把标签视为“浮动引用”(即使标签通常固定,它仍需要明确的哈希或解析逻辑),因此要求你配合SRCPV生成唯一版本号,避免缓存歧义。
正确配置方案
针对固定Git标签的拉取,有两种可靠的配置方式:
方案一:仅通过SRC_URI指定标签(推荐用于明确固定的标签)
直接在SRC_URI中声明标签,无需设置SRCREV,BitBake会自动解析标签对应的提交哈希:
PV = "6.44" SRC_URI = "git://example.com/repo.git;protocol=https;branch=main;tag=${PV}"
注意:确保标签6.44确实存在于指定的branch=main分支上,否则拉取会失败。
方案二:使用提交哈希作为SRCREV(推荐用于追求绝对稳定的构建)
去掉SRC_URI中的tag参数,直接将标签对应的提交哈希赋值给SRCREV:
PV = "6.44" SRC_URI = "git://example.com/repo.git;protocol=https;branch=main" SRCREV = "2bd3465aa7eac0d2de55c9918ce66cac1bcc048f"
这种方式完全避免了标签被意外修改的风险,构建版本绝对可控。
关于“use SRCPV in PV for OE”的解释
这句话是针对浮动引用(如分支名、可能被更新的标签)的场景:当你用分支名作为版本来源时,需要将SRCPV(BitBake自动生成的提交短哈希变量)加入PV,比如PV = "6.44+git${SRCPV}",同时设置SRCREV = "${@bb.fetch2.get_srcrev(d)}"来自动获取最新提交哈希。但对于固定标签,你不需要这种配置,前面两种方案足够。
内容的提问来源于stack exchange,提问作者daneos
相关产品推荐
相关产品推荐

