内容提要
作者因Mac故障无法开机,在PC上重建工作流时,用自研工具dotr从Git仓库恢复配置。dotr是Rust编写的备份工具,核心是复制指定文件到Git仓库,支持路径配置、加密、忽略琐碎变化、自动备份和恢复。它强调备份而非复杂部署,恢复默认保守,需显式确认。作者认为此工具简单实用,适合个人配置备份需求。
延伸解读
备份与部署的取舍
dotr 的设计理念是“备份优先”,而非复杂的配置部署系统。它不要求将 home 目录变成模板工程,也不强制使用 symlink 或 bootstrap 脚本,而是简单地将指定文件复制到 Git 仓库。这种思路适合那些只需要安全保存配置、不追求跨机器自动同步的用户。相比之下,chezmoi 或 yadm 等工具功能更全面,但可能引入不必要的复杂性。
恢复操作的安全设计
dotr 的 restore 命令默认是 dry-run,必须显式加 --apply 才会写回原位置,且目标文件已存在且内容不同时不会覆盖,除非加 --force。对于绝对路径的恢复,还需额外加 --allow-absolute。这种保守设计避免了误覆盖导致的环境问题,尤其适合配置文件这类一旦出错难以排查的场景。
加密与敏感信息管理
dotr 支持对单个路径使用 age 加密,但不会自动猜测哪些文件需要加密,而是由用户显式指定。这避免了自动判断可能带来的误判风险。同时,文章提醒,如果敏感信息已以明文进入 Git 历史,开启加密只能保护未来备份,无法清除历史记录,必要时需轮换密钥。
忽略琐碎变化,保持历史干净
配置文件常包含时间戳等每次运行都会变化的字段,dotr 的 normalize 功能可在比较 hash 时忽略这些字段,避免产生无意义的 diff。它不会改写源文件或备份文件,仅影响比较逻辑。这有助于保持 Git 历史整洁,让真正的配置变更更突出。
Q&A
dotr 是什么工具?它主要解决什么问题?
dotr 是一个用 Rust 编写的简单配置备份工具,核心功能是把用户指定的文件和目录复制到一个 Git 仓库中,并保存元数据以便恢复。它主要解决个人配置文件备份问题,强调备份而非复杂的部署系统,适合不想折腾 symlink 或模板的用户。
如何安装 dotr?
可以通过 crates.io 安装,命令为:cargo install dotr-cli,安装后命令是 dotr。
dotr 的备份原理是什么?它如何存储文件?
dotr 将指定文件和目录复制到 Git 仓库中,并保存 metadata。仓库结构包括 dotr.toml、files/、metadata/ 等。例如,~/.zshrc 会存到 files/home/.zshrc,而 $HOME 之外的绝对路径会存到 files/root/... 下。源文件保持在原位置,dotr 只是复制。
dotr 如何配置备份路径?
配置主要围绕 [[path]] 和 [[path_set]]。path_set 用于简化 home 目录下的配置,可以写字符串或 table,table 支持 include、exclude、encrypt、force 等字段。默认策略会跳过缓存、日志、临时文件等,推荐显式 include 需要的文件。
dotr 的 restore 操作有什么安全机制?
restore 默认是 dry-run,必须加 --apply 才会写回原位置。如果目标文件已存在且内容不同,默认不覆盖,除非加 --force。对于 $HOME 之外的绝对路径,还需要额外加 --allow-absolute。
dotr 支持加密吗?如何加密配置文件?
支持,使用 age 加密。可以运行 dotr keygen 生成密钥,然后使用 dotr add --encrypt ~/.npmrc 添加加密路径。配置中需设置 [encryption] 部分,指定 backend、recipients_file 和 identity。私钥必须妥善保存,不能提交到仓库。
dotr 如何处理配置文件中频繁变化的字段?
dotr 支持 normalize 配置,可以对匹配的文件进行 compare-only normalization,即比较 hash 时忽略指定字段(如时间戳),但不会修改源文件或备份文件。这样只有这些字段变化时不会产生备份,真正配置变化时仍会备份。
dotr 支持自动备份吗?如何设置?
支持,可以通过 watch 模式监听文件变化并自动备份,也可以使用 daemon 命令在后台运行。配置中可设置 [git] auto_commit 和 auto_push 实现自动提交和推送。
dotr 如何处理非文件类的备份,比如 Homebrew 包列表?
dotr 支持 [[custom_backup]] 配置,可以定义 backup 和 restore 命令,以及生成的文件路径。例如,备份 Homebrew 包列表时,先运行 brew bundle dump 生成 Brewfile,再备份该文件;恢复时先恢复文件再运行 brew bundle。
dotr 与其他 dotfiles 管理工具(如 chezmoi、yadm)相比有什么特点?
dotr 更偏向于简单的 copy-based backup 工具,不提供模板、条件渲染、复杂 bootstrap 或 secret manager 集成。它强调备份而非部署,恢复功能基础。作者认为对于个人配置备份,直接交给 AI 恢复更方便。