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

如何用git archive替换QGIS插件代码中的SHA1版本号?

解决QGIS插件部署时自动替换Git版本号的问题

这里提供几个实用方案,帮你在部署插件时自动把__revision__替换成对应Git版本号,替代单纯的文件复制:

方案1:用git archive直接提取到目标目录(无需生成归档文件)

Git archive本身支持将内容输出到标准输出,配合tar可以直接提取到指定目录,同时自动完成版本号替换(前提是你的__revision__变量是__revision__ = "$Format:%H$"这种Git可识别的格式)。

执行命令:

git archive <目标版本> | tar -x -C /path/to/qgis/plugins/你的插件目录
  • 把<目标版本>换成具体的commit哈希、分支名或标签,比如HEAD(当前分支最新版本)、v1.2.3(标签)。
  • 这个命令会把Git已跟踪的文件直接解压到QGIS插件目录,同时__revision__会被替换为对应版本的SHA1值,完全跳过归档文件生成步骤。

方案2:本地替换版本号后再复制

如果需要包含未跟踪的文件(比如临时配置),或者不想用git archive,可以先批量替换Python文件里的版本号,再复制到插件目录:

  1. 获取当前Git版本号(短哈希,也可以用--long获取完整SHA):
GIT_SHA=$(git rev-parse --short HEAD)
  1. 批量替换所有Python文件中的__revision__:
find /你的插件源码目录 -name "*.py" -exec sed -i "s/__revision__ = \".*\"/__revision__ = \"$GIT_SHA\"/g" {} +
  1. 复制文件到QGIS插件目录(用rsync或cp都可以):
rsync -av --exclude='.git' /你的插件源码目录/ /path/to/qgis/plugins/你的插件目录/

方案3:给pb_tool添加自定义部署任务

既然你正在用pb_tool,可以把替换逻辑整合到pb_tool的命令中,修改pb_tool.cfg文件,在[commands]部分添加自定义任务:

[commands]
deploy_with_rev = !GIT_SHA=$(git rev-parse --short HEAD) && find . -name "*.py" -exec sed -i "s/__revision__ = \".*\"/__revision__ = \"$GIT_SHA\"/g" {} + && pb_tool deploy

之后只需运行pb_tool deploy_with_rev,就能自动完成版本号替换+部署的流程。

注意事项

  • 确保所有Python文件中的__revision__格式统一,比如都是__revision__ = "xxx"的形式,否则替换命令可能失效。
  • Windows环境下,上述bash命令需要在Git Bash或WSL中执行;如果用PowerShell,替换命令可以改成:
    $GIT_SHA = git rev-parse --short HEAD
    Get-ChildItem -Recurse -Filter *.py | ForEach-Object {
        (Get-Content $_.FullName) -replace '__revision__ = ".*"', "__revision__ = `"$GIT_SHA`"" | Set-Content $_.FullName
    }
    
  • git archive方式只会处理Git已跟踪的文件,未提交的修改或未跟踪文件不会被包含,这种情况优先选方案2。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 11:32:40