w

Rime系列-06:基于网盘 WebDAV & Git 的多端(小狼毫&鼠须管&同文&仓输入法)词库全自动同步灾备

Rime系列-06:基于网盘 WebDAV & Git 的多端(小狼毫&鼠须管&同文&仓输入法)词库全自动同步灾备
该条目是 第 6 部分,共 8 在系列中 Rime定制

Rime定制

Rime系列-01:Rime 输入法跨平台选型、YAML 配置文件底层逻辑与最简五笔方案部署

Rime系列-02:破除方块字:Rime 全局外观调教、高颜值字体挂载与极简皮肤自定义

Rime系列-03:抖音&网络高频百万级词库清洗、大词库导入与词典(Dict)多层级嵌套挂载

Rime系列-04:彻底告别调频混乱:五笔固码规则、词频(Weight)动态调优与自定义短语(Custom_Phrases)

Rime系列-05:中英无感切换调教、中文字符快捷映射与十个极客必会的 Rime 内置快捷键

Rime系列-06:基于网盘 WebDAV & Git 的多端(小狼毫&鼠须管&同文&仓输入法)词库全自动同步灾备

Rime系列-07:Rime 五笔输入法设置与lua扩展

Rime系列-09:RIME中州韵输入法词库扩充(搜狗词库,QQ拼音词库,清华词库,拆字词库U模式等)

🤖 摘要:本文详述基于Git与WebDAV的多端Rime词库同步灾备方案。采用单向定时同步架构规避冲突,借助自动化脚本实现跨平台配置、iOS适配与版本控制。内容涵盖目录规范、核心脚本、冲突处理及恢复流程,并附生产环境避坑指南,助力构建高可用可追溯的词库管理体系。


📌 适用场景:Windows(小狼毫 Weasel) / macOS(鼠须管 Squirrel) / iOS(同文 Tatarin & 仓输入法 Cangjie)
🛠 核心技术栈:<code>Rime 官方同步机制</code> + <code>WebDAV 云盘挂载/同步</code> + <code>Git 版本控制</code> + <code>自动化脚本</code>
⚠️ 核心痛点解决:多端配置碎片化、词库丢失无回滚、WebDAV 实时同步冲突、iOS 沙箱限制


📐 一、架构设计总览

[本地编辑] → Rime Sync Dir (userdb.txt / override.dict.yaml / *.custom.yaml)
      ↓
[自动化层] → 定时触发 → rclone sync ↔ WebDAV 云盘 ↔ Git Remote (GitHub/Gitee/GitLab)
      ↓
[灾备层]   → Git History (代码级回滚) + WebDAV 多副本 (云盘容灾)
      ↓
[多端分发] → Windows/macOS/Linux: WebDAV 挂载或脚本拉取  
             iOS: iCloud 同步(Rime 官方推荐) + Git 冷备

💡 设计原则

  • Git 为主干:保存词库历史、分支、差异对比,支持精确回滚
  • WebDAV 为容灾:防止云盘服务商宕机或仓库被误删
  • 避免实时双向同步:输入法高频写入易引发冲突,采用 <code>定时单向同步 + Git 冲突检测</code>

📁 二、目录结构规范

rime-sync/
├── .gitignore          # 忽略临时文件、二进制缓存
├── sync.sh / sync.ps1  # 自动化脚本
├── restore.sh / restore.ps1
├── docs/               # 说明文档、冲突处理记录
└── rime_data/          # 实际同步内容(软链接或目录映射)
    ├── default.custom.yaml
    ├── override.dict.yaml
    ├── userdb.txt
    ├── *.userdb.txt
    └── ...

✅ <code>.gitignore</code> 示例:

*.dict.yaml.userdb.txt.bak
rime_data/*.txt.lock
rime_data/.DS_Store
rime_data/thumbnail/
*.tmp
*.swp

🛠 三、核心配置步骤

1. 初始化 Git 仓库 & WebDAV 云盘

# 1. 创建远程仓库(GitHub/Gitee/GitLab/私有服务器)
git init
git remote add origin &lt;your-git-url&gt;

# 2. 安装 rclone(WebDAV 同步引擎)
# macOS: brew install rclone | Windows: choco install rclone
rclone config    # 添加你的 WebDAV(如阿里云盘/123Pan/Nextcloud/AList)

2. Rime 端配置同步目录

在 <code>default.custom.yaml</code> 中设置本地同步目录:

sync_dir: &quot;%APPDATA%\Rime\rime_sync&quot;   # Windows
# 或 ~/Library/Rime/rime_sync           # macOS

🤖 四、自动化同步脚本

🔹 macOS / Linux (<code>sync.sh</code>)

#!/bin/bash
set -euo pipefail

SYNC_DIR=&quot;$HOME/Library/Rime/rime_sync&quot;
REMOTE_DIR=&quot;rclone_webdav:rime-sync/rime_data&quot;
GIT_REPO=&quot;$(cd &quot;$(dirname &quot;$0&quot;)&quot; &amp;&amp; pwd)&quot;

echo &quot;[$(date)] 开始同步...&quot;

# 1. 拉取 Git(避免本地未 push 被覆盖)
cd &quot;$GIT_REPO&quot;
git pull --rebase || echo &quot;⚠️ Git pull failed, continuing with local files&quot;

# 2. rclone sync(单向覆盖 WebDAV)
rclone sync &quot;$SYNC_DIR&quot; &quot;$REMOTE_DIR&quot; --transfers=4 --checkers=8 -v

# 3. Git 提交
cd &quot;$GIT_REPO&quot;
git add -A
if git diff --cached --quiet; then
  echo &quot;✅ 无变更,跳过提交&quot;
else
  git commit -m &quot;sync: $(date +%F_%T)&quot; --quiet
  git push origin main || echo &quot;⚠️ Push failed, run manually&quot;
fi

echo &quot;[$(date)] 同步完成&quot;

🔹 Windows (<code>sync.ps1</code>)

$SYNC_DIR = &quot;$env:APPDATA\Rime\rime_sync&quot;
$REMOTE_DIR = &quot;rclone_webdav:rime-sync/rime_data&quot;
$GIT_REPO = $PSScriptRoot

Write-Host &quot;[$(Get-Date)] Starting sync...&quot; -ForegroundColor Cyan

# 1. Git pull
Set-Location $GIT_REPO
git pull --rebase 2&gt;&amp;1 | Out-Null

# 2. rclone sync
rclone sync &quot;$SYNC_DIR&quot; &quot;$REMOTE_DIR&quot; --transfers=4 --checkers=8 -v

# 3. Git commit &amp; push
$changes = git diff --cached --name-only
if ($changes) {
  git add -A
  git commit -m &quot;sync: $((Get-Date).ToString(&#039;yyyy-MM-dd_HH-mm-ss&#039;))&quot; -q
  git push origin main 2&gt;&amp;1 | Out-Null
} else {
  Write-Host &quot;No changes detected.&quot; -ForegroundColor Green
}

Write-Host &quot;[$(Get-Date)] Sync complete.&quot; -ForegroundColor Green

📅 定时任务配置

  • macOS: <code>crontab -e</code> → <code>*/5 * * * * ~/rime-sync/sync.sh >> ~/rime-sync/sync.log 2>&1</code>
  • Windows: 任务计划程序 → 每5分钟触发 <code>sync.ps1</code>

📱 五、iOS 端适配方案

iOS 沙箱机制不支持直接 WebDAV 挂载,推荐以下组合:

App 同步方式 与 Git/WebDAV 关系
同文 Tatarin iCloud 同步(官方支持) iCloud → macOS 自动同步 → Git/WebDAV
仓输入法 文件分享 / iCloud Drive 手动导出 <code>RimeData</code> → 放入同步目录

iOS 灾备建议

  1. 开启同文/iCloud 同步,保持多设备实时一致
  2. 每月手动导出一次词库文件,放入 <code>rime_data/</code> 目录
  3. Windows/macOS 脚本会定期将 iCloud 同步的本地副本推送到 Git/WebDAV

🆘 六、灾备恢复与冲突处理

🔍 冲突预防机制

# 在 sync.sh 开头添加冲突检测
if git diff --name-only HEAD@{1} HEAD | grep -q &quot;userdb.txt\|override.dict.yaml&quot;; then
  echo &quot;⚠️ 检测到词库变更,已生成时间戳备份&quot;
  cp -r &quot;$SYNC_DIR&quot; &quot;$SYNC_DIR.bak.$(date +%s)&quot;
fi

🔄 恢复流程(任意端)

# 1. 克隆仓库 &amp; 挂载 WebDAV(可选)
git clone &lt;your-git-url&gt; rime-sync-recovery
cd rime-sync-recovery

# 2. 恢复词库文件到 Rime 目录
cp -r rime_data/* ~/Library/Rime/   # macOS
# 或 %APPDATA%\Rime\                # Windows

# 3. 重启输入法引擎
rime_restart() {
  osascript -e &#039;quit app &quot;Squirrel&quot;&#039; &amp;&amp; open -a Squirrel.app
  # Windows: taskkill /F /IM Weasel.exe &amp; start Weasel.exe
}

📜 Git 回滚示例

git log --oneline -- rime_data/userdb.txt | head -5
git checkout abc123 -- rime_data/userdb.txt
git commit -m &quot;rollback to safe version&quot; -q

📌 七、避坑指南 & 最佳实践

问题现象 原因 解决方案
WebDAV 同步卡死/报错 文件锁或权限不足 <code>rclone sync</code> 改用 <code>–drive-chunk-size=64M</code>,关闭云盘实时同步
Git push 频繁触发 CI/CD 未过滤非文本文件 <code>.gitignore</code> 严格过滤,脚本加 <code>–quiet</code>
iOS 与 Windows/macOS 词库不一致 多端编辑未同步 单点编辑原则:仅在一台设备修改,其他设备拉取更新
词库膨胀导致同步慢 <code>userdb.txt</code> 未压缩/未清理 定期运行 <code>rime_build_dict</code>,清理过期词条
冲突后手动合并困难 无差异记录 Git 开启 <code>diff.mnemonicprefix=true</code>,使用 <code>git difftool</code>

生产环境建议

  1. 词库文件提交前执行 <code>dos2unix</code> / <code>unix2dos</code>(跨平台换行符统一)
  2. 敏感词库可加密:<code>gpg -c userdb.txt</code> → Git 存 <code>.gpg</code> → 脚本解密后同步
  3. 定期测试恢复流程(至少每季度一次)

📎 附录:一键初始化模板

# 克隆本模板并替换占位符
git clone &lt;your-repo-url&gt; rime-sync
cd rime-sync
chmod +x sync.sh restore.sh
rclone config  # 配置你的 WebDAV
crontab -e    # Windows 用任务计划器

📥 源码/配置模板:<code>[链接占位符,可替换为 GitHub/Gitee 仓库]</code>
💬 常见问题:冲突自动合并策略 / AList 穿透加速 / iCloud 同步延迟处理 / 词库增量同步优化

🌟 总结:WebDAV + Git 组合为 Rime 词库提供了 <code>实时容灾 + 版本追溯 + 多端兼容</code> 的工业级方案。核心在于规避双向实时同步,以 Git 为唯一事实源,WebDAV 为冗余副本,通过定时脚本实现安全流转。

如需提供对应平台的完整脚本包、AList WebDAV 加速配置或 iOS iCloud 自动化同步 workflow,可回复具体需求。e — rime_data/userdb.txt | head -5
git checkout abc

Rime定制

Rime系列-05:中英无感切换调教、中文字符快捷映射与十个极客必会的 Rime 内置快捷键 Rime系列-07:Rime 五笔输入法设置与lua扩展