更新日志 - 2026年1月3日

🐛 Bug修复

修复备份脚本无法检测配置变更的问题

问题描述: 备份脚本运行后总是显示"No configuration changes detected",即使用户修改了配置文件(如OpenClash的config.yaml),脚本也无法检测到变化,导致2周没有新的备份推送到GitHub。

根本原因

  1. Git reset时机错误:脚本在提取新配置之前就执行了 git reset --hard origin/master,导致本地的configs目录被远程版本覆盖
  2. 顺序问题
    • 旧逻辑:Reset → 提取新配置 → 比较(看不到差异)
    • 应该:提取新配置 → 比较 → 提交 → 推送 → Reset同步

修复内容

  1. 调整Git操作顺序 (smart_backup.sh)

    • 移除初始化阶段的 git reset --hardgit pull
    • 只在推送成功后才执行 git reset --hard origin/master 同步远程状态
    • 添加推送失败时的merge重试逻辑
  2. 增强OpenClash配置备份 (smart_backup.sh)

    • 新增备份 /etc/openclash/*.yaml 配置文件
    • 确保OpenClash的config.yaml等配置文件变更能被检测到
    • 配置文件备份到 openclash/ 目录
  3. 改进变更检测 (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协助生成