更新日志 - 2026年1月3日
🐛 Bug修复
修复备份脚本无法检测配置变更的问题
问题描述: 备份脚本运行后总是显示"No configuration changes detected",即使用户修改了配置文件(如OpenClash的config.yaml),脚本也无法检测到变化,导致2周没有新的备份推送到GitHub。
根本原因:
- Git reset时机错误:脚本在提取新配置之前就执行了
git reset --hard origin/master,导致本地的configs目录被远程版本覆盖 - 顺序问题:
- 旧逻辑:Reset → 提取新配置 → 比较(看不到差异)
- 应该:提取新配置 → 比较 → 提交 → 推送 → Reset同步
修复内容:
-
调整Git操作顺序 (smart_backup.sh)
- 移除初始化阶段的
git reset --hard和git pull - 只在推送成功后才执行
git reset --hard origin/master同步远程状态 - 添加推送失败时的merge重试逻辑
- 移除初始化阶段的
-
增强OpenClash配置备份 (smart_backup.sh)
- 新增备份
/etc/openclash/*.yaml配置文件 - 确保OpenClash的config.yaml等配置文件变更能被检测到
- 配置文件备份到
openclash/目录
- 新增备份
-
改进变更检测 (smart_backup.sh)
- 同时检查
configs/和openclash/目录的变更 - 更新commit message生成逻辑,包含openclash文件名
- 同时检查
测试验证:
- ✅ 连接实际树莓派设备测试
- ✅ 检测到/etc/config/openclash的修改(77000 vs 77488 bytes)
- ✅ 成功生成commit:"Update: openclash, config.yaml (2026-01-03)"
- ✅ 成功推送到GitHub仓库
影响范围:
- 所有使用smart_backup.sh的用户
- 特别是使用OpenClash等插件的用户
📝 文档更新
更新备份脚本文档
- 更新scripts/README.md说明文档
- 明确说明脚本监控
/etc/config和/etc/openclash两个目录 - 更新"为什么有时候不备份"的FAQ说明
- 添加OpenClash配置支持的说明
- 明确说明脚本监控
🔧 技术细节
修改前的问题代码:
# 旧代码 - 问题所在
if [ -d "$BACKUP_DIR/.git" ]; then
cd "$BACKUP_DIR"
git fetch origin
git reset --hard origin/"$BRANCH" # ❌ 这里覆盖了本地configs
git pull origin "$BRANCH"
fi
# 然后提取配置... 但已经看不到差异了
修复后的代码:
# 新代码 - 正确流程
if [ -d "$BACKUP_DIR/.git" ]; then
cd "$BACKUP_DIR"
git config user.name "Router Auto Backup"
git config user.email "router@local"
# 注意:这里不reset,保留本地状态以便检测变更
fi
# ... 提取配置、检测变更、提交 ...
# 推送成功后才同步:
git push origin "$BRANCH"
git fetch origin
git reset --hard origin/"$BRANCH" # ✅ 现在才同步
🎯 用户影响
受益用户:
- 修改过OpenClash配置但发现没有备份的用户
- 发现GitHub仓库长时间没有更新的用户
- 需要追踪OpenClash配置变更历史的用户
如何升级:
# 从GitHub获取最新脚本
cd /tmp
wget https://raw.githubusercontent.com/Ronchy2000/Raspi-ImmortalWrt/master/scripts/smart_backup.sh
# 上传到树莓派
scp smart_backup.sh root@192.168.1.1:/root/
# 测试运行
ssh root@192.168.1.1 "/root/smart_backup.sh"
Changelog由GitHub Copilot协助生成