升级工具开发
约 1768 字大约 6 分钟
2025-04-11
参考
安装必要库
go-xdelta(功能接口暂保留)
# go get github.com/nine-lives-later/go-xdelta
# 运行报错找不到 `*.h` 文件,需要把这个 `xdelta3` 克隆到 `go-xdelta` 目录下
# https://gitee.com/openkylin/xdelta3go-bsdiff
go get -v github.com/icedream/go-bsdiff/...压缩包操作
压缩命令(多个文件、多个文件夹)
go run ./tools/upgrade/main.go compress testdata.tar.gz ./producer ./README.md ./LICENSE ./logger解压压缩包(单个文件)
go run ./tools/upgrade/main.go decompress testdata.tar.gz ./output请求详细信息
go run ./tools/upgrade/main.go info example_key_1网络请求(json 交互、仅支持JSON文件)
# 使用示例
go run ./tools/upgrade/main.go request --url http://localhost:8888/package.json --method GET --header "Content-Type: application/json" --body '{"key": "value"}'
# 支持短参数
go run ./tools/upgrade/main.go request -u http://localhost:8888/package/ -m POST -H "Authorization: Bearer token" -b '{"data": 123}'
# 查看帮助
go run ./tools/upgrade/main.go request --help差异文件生成(单个文件)
go-xdelta(暂保留)
命令行工具使用示例
# 查看帮助
$ go run ./tools/upgrade/main.go create-patch --help
根据旧文件和新文件生成二进制差异补丁文件,支持自定义块大小
示例:
upgradeReWi create-patch old.bin new.bin patch.xd
upgradeReWi create-patch old.bin new.bin patch.xd --block-size 8192
Usage:
upgradeReWi create-patch <old-file> <new-file> <patch-file> [flags]
Flags:
-b, --block-size int 差异计算块大小(单位:KB) (default 4)
-h, --help help for create-patch
# 生成补丁(block-size默认为4)
$ go run ./tools/upgrade/main.go create-patch ./tools/oldFile.txt ./tools/newFile.txt ./tools/patch.xd
# 生成补丁(自定义块大小) (block-size 设置为<=0, 自动寻找最优块、纯文本会出错)
$ go run ./tools/upgrade/main.go create-patch ./tools/oldFile.txt ./tools/newFile.txt ./tools/patch.xd -b 8192
$ go run ./tools/upgrade/main.go create-patch ./tools/oldFile.txt ./tools/newFile.txt ./tools/patch.xd -b 0
# 错误示例(文件不存在)
$ go run ./tools/upgrade/main.go create-patch ./tools/missing.bin ./tools/newFile.txt ./tools/patch.xd
Error: 参数 1 文件不存在: stat missing.bin: no such file or directorygo-bsdiff (推荐)
命令行工具使用示例
# 查看帮助
$ go run ./tools/upgrade/main.go diff --help
Generate binary diff between two files
Usage:
upgradeReWi diff <oldfile> <newfile> <patchfile> [flags]
Flags:
-h, --help help for diff
# 生成补丁
$ go run ./tools/upgrade/main.go diff ./tools/oldFile.txt ./tools/newFile.txt ./tools/patch.patch用差异文件生成新文件(单个文件)
go-xdelta(暂保留~)
命令行工具使用示例
# 查看帮助信息
$ go run ./tools/upgrade/main.go apply-patch --help
使用旧文件和补丁文件生成新版本文件
示例:
upgradeReWi apply-patch old.bin patch.xd new.bin
upgradeReWi apply-patch old.bin patch.xd new.bin --block-size 8192
Usage:
upgradeReWi apply-patch <old-file> <patch-file> <new-file> [flags]
Flags:
-b, --block-size int 补丁解码块大小(单位:KB) (default 4)
-h, --help help for apply-patch
# 正常使用案例
$ go run ./tools/upgrade/main.go apply-patch ./tools/oldFile.txt ./tools/patch.xd ./tools/newFile_1.txt -b 8192
新文件生成成功!
路径: /projects/updated.bin
大小: 128.34 MB
# 错误案例:补丁文件不存在
$ go run ./tools/upgrade/main.go apply-patch ./tools/oldFile.txt missing.xd ./tools/newFile.txt
Error: 参数 2 文件不存在: stat missing.xd: no such file or directory
# 错误案例:目标文件已存在
$ go run ./tools/upgrade/main.go apply-patch ./tools/oldFile.txt ./tools/patch.xd ./tools/existing.txt
Error: 目标文件已存在: existing.bingo-bsdiff (推荐~)
命令行工具使用示例
# 查看帮助信息
$ go run ./tools/upgrade/main.go patch --help
Apply binary patch to create new file
Usage:
upgradeReWi patch <oldfile> <patchfile> <newfile> [flags]
Flags:
-h, --help help for patch
# 生成新文件
go run ./tools/upgrade/main.go patch ./tools/oldFile.txt ./tools/patch.patch ./tools/newFile_2.txtGit 操作
通过git升级
命令行工具使用示例
# 查看帮助信息
$ go run ./tools/upgrade/main.go sync-code --help
自动检测并同步Git代码仓库更新
示例:
# 同步当前目录仓库
upgradeReWi sync-code
# 同步指定目录仓库
upgradeReWi sync-code --path /projects/my-repo
Usage:
upgradeReWi sync-code [flags]
Flags:
-b, --branch string 指定同步分支
-f, --force 强制同步(忽略检测结果)
-h, --help help for sync-code
-p, --path string Git仓库路径 (default ".")
# 正常同步流程
$ go run ./tools/upgrade/main.go sync-code --path ./src
正在检查代码更新 [仓库: src]
发现新版本,开始更新代码...
remote: Counting objects: 15, done.
Receiving objects: 100% (15/15), 5.23 KiB | 2.62 MiB/s, done.
✅ 代码仓库状态已同步
# 强制同步(重置本地修改)
$ go run ./tools/upgrade/main.go sync-code -f
正在检查代码更新 [仓库: my-repo]
HEAD is now at a1b2c3d 更新功能配置
✅ 代码仓库状态已同步
# 指定分支同步
$ go run ./tools/upgrade/main.go sync-code -b develop
正在检查代码更新 [仓库: my-repo]
切换到分支 'develop'
✅ 代码仓库状态已同步通过git自动生成所有差异文件
命令行工具使用示例
$ go run ./tools/upgrade/main.go generate -h
通过 git 工具自动生成所有差异文件
Usage:
upgradeReWi generate [flags]
Flags:
-b, --base string 基准版本 (必填)
-h, --help help for generate
-o, --output string 输出目录 (default "./vX.X.X")
-r, --repo string Git仓库URL (必填)
-t, --target string 目标版本 (默认HEAD) (default "HEAD")
-w, --workers int 并行工作数 (default 4)
# 生成版本差异
$ go run ./tools/upgrade/main.go generate -r https://gitee.com/re-wi/FT4222PyTool.git -b V1.0.0 -t v1.1.6 -o ./vX.X.X -w 8
# 比较当前修改
$ go run ./tools/upgrade/main.go generate -r . -b origin/main -t WORKDIR -o ./vX.X.X
# 使用本地目录
$ go run ./tools/upgrade/main.go generate -r LOCALHOST -b ./v1.0.0 -t ./v2.0.0 -o ./vX.X.X -w 1输出目录结构
- vX.X.X (版本文件夹)
- package.json (描述文件)
- README.md (升级包说明)
- files (升级文件文件夹)
- dir
- file1.txt (新增文件)
- file2.patch (差异文件)
- ...
- file1.txt (新增文件)
- file2.patch (差异文件)
- ...
- dir
SSH 配置检查
命令行工具使用示例
# 在 GitHub 仓库中运行
$ go run ./tools/upgrade/main.go ssh-check
测试连接至 [github] 平台...
Hi username! You've successfully authenticated...
✅ SSH认证正常 (git@github.com:user/repo.git)
# 在 Gitee 仓库中认证失败
$ go run ./tools/upgrade/main.go ssh-check
测试连接至 [gitee] 平台...
🔴 [gitee] SSH连接失败
=== 错误信息 ===
Hi ReWi(@re-wi)! You've successfully authenticated, but GITEE.COM does not provide shell access.
=== 解决方案 ===
1. 生成专用密钥:
ssh-keygen -t ed25519 -f ~/.ssh/gitee_key -C "your_email@example.com"
2. 添加SSH配置到 ~/.ssh/config:
Host gitee.com
IdentityFile ~/.ssh/gitee_key
3. 查看公钥并添加到平台:
cat ~/.ssh/gitee_key.pub
4. 测试连接:
ssh -T git@gitee.com
官方指南: https://gitee.com/help/articles/4181嗅探器,分析仪
go run ./tools/upgrade/main.go sniffer --helpcheck 智能环境检测并获取最新版本号
相关信息
传入三个可选参数(平台名、依赖名、项目名)、先检查当前是连接到git仓库、不是则用三个参数去组成URL请求version.txt文件,从而验证环境可用性
version.txt文件保存当前最新版本号,内容:v1.0.0
Git 环境示例,不需要多余参数
-v显示详细过程
命令行工具使用示例
$ go run ./tools/upgrade/main.go sniffer check
latest version: v0.2.2
$ go run ./tools/upgrade/main.go sniffer check -v
Currently in a Git repository environment
latest: v0.2.2, err: <nil>
latest version: v0.2.2非 Git 环境,需要传入必要的参数,组成URL,访问服务器
-pplatform 平台名称,如:Windows-ddependency 依赖名称(依赖最大的硬件或者软件或者系统版本),如:FT4222-jproject 项目名称,如:FT4222PyTool-s请求服务器而跳过 git仓库 检查
命令行工具使用示例
# 成功示例
$ go run ./tools/upgrade/main.go sniffer check -p Windows -d FT4222 -j FT4222PyTool -s -v
Request the server and skip the git repository check
StatusCode: 200, ReqURL: http://localhost:8888/Windows/FT4222/FT4222PyTool/version.txt
latest: v0.0.0, err: <nil>
latest version: v0.0.0
# 不成功示例
$ go run ./tools/upgrade/main.go sniffer check -p Windows -d FT4222 -j FT4222Py -s -v
Request the server and skip the git repository check
StatusCode: 404, ReqURL: http://localhost:8888/Windows/FT4222/FT4222Py/version.txt
StatusCode: 404, Error: after 3 attempts, last status: 404, error: %!w(<nil>)
latest: , err: after 3 attempts, last status: 404, error: %!w(<nil>)
Check failure: after 3 attempts, last status: 404, error: %!w(<nil>)fetch 下载指定文件(带相对目录)
# 下载文件到指定位置(相对路径)
$ go run ./tools/upgrade/main.go sniffer fetch -p Windows -d FT4222 -j FT4222PyTool -o v0.0.1/package.tar.gz增量升级
# 开始升级
$ go run./tools/upgrade/main.go upgrader -i ./package.tar.gz -o ./