下载的官方sdk往往伴随着一堆patch,数了一下有几十个,不同目录。
想请教下,这些patch怎么能批量执行...你们都是怎么打这些patch的...
离线
一般都是手工比对着合入patch,不建议跑脚本自动合入,除非你能确定patch的目标文件版本是相同的。
离线
我一般在官方SDK上打补丁,打完之后用Beyond Compare对比着同步到自己修改过的SDK上。下面是找AI写的批量打补丁的脚本,脚本需要放到补丁的patch_files目录下执行。目前仅在V851S的SDK使用过,其它型号的不确定是否有问题哈。
#!/bin/bash
# 校验命令行参数
if [ $# -ne 1 ]; then
echo "用法: $0 <b目录路径>"
exit 1
fi
# 脚本所在目录(a目录)
dir_a="$(cd "$(dirname "$0")" && pwd)"
# 传入的b目录路径(可能是相对路径或绝对路径)
input_dir_b="$1"
# 将b目录路径转换为绝对路径
if [ -d "$input_dir_b" ]; then
dir_b="$(cd "$input_dir_b" && pwd)"
else
echo "错误: 目标目录不存在或不是目录: $input_dir_b"
exit 1
fi
# 遍历a目录下所有.patch文件
find "$dir_a" -type f -name "*.patch" | while read -r patch_path; do
# 计算相对路径(相对于a目录)
relative_path="${patch_path#$dir_a/}"
# 目标路径
target_path="$dir_b/$relative_path"
# 创建目标目录(如果不存在)
target_dir=$(dirname "$target_path")
mkdir -p "$target_dir"
# 拷贝patch
cp "$patch_path" "$target_path"
# 进入patch所在目录执行git am
cd "$target_dir" || { echo "切换目录失败: $target_dir"; exit 1; }
echo "正在应用patch: $(basename "$target_path")"
git am --keep-cr "$(basename "$target_path")"
# 判断git am是否成功
if [ $? -eq 0 ]; then
rm -f "$(basename "$target_path")"
echo "patch应用成功并已删除:$(basename "$target_path")"
else
echo "patch应用失败,patch未删除:$(basename "$target_path")"
fi
# 返回脚本执行目录
cd "$dir_a" || exit 1
done
离线