Matrix 首页推荐

Matrix 是少数派的写作社区,我们主张分享真实的产品体验,有实用价值的经验与思考。我们会不定期挑选 Matrix 最优质的文章,展示来自用户的最真实的体验和观点。

文章代表作者个人观点,少数派仅对标题和排版略作修改。


如果你使用 Chrome 或者 VScode,就一定能体会到自动同步设置和插件的幸福,可惜这种幸福并不常有。每一次更换环境,我都得花一大把时间伺候 Typora、ShareX、Everything 等应用,只为将它们配置成我熟悉的样子。

直到我听闻有一位 Linux 开发者,他将 Linux 系统和应用的关键设置文件使用拷贝下来,这样不论在去哪儿工作,不多时就能让系统变成自己熟悉的样子。而 Windows 中的一部分应用也由可迁移的配置文件控制,只要有方法集中管理和备份这些文件,就能一劳永逸地解决应用设置问题。

实现这个目标需要解决三个问题:

  1. 去哪找 Windows 应用的配置文件?
  2. 如果它们分散在多个文件夹中,怎么统一管理和备份?
  3. 使用什么工具备份这些文件,又怎么处理文件夹里面不需要同步的东西?

相关知识

找到配置文件:三个重要文件夹

Windows 是一个多用户的操作系统,从注册表,到文件目录都严格遵循「系统 - 用户」的两级排列方式,配置文件也不例外,它们被设计在存放以下两个文件夹中:

  • 系统盘根目录隐藏文件夹:ProgramData。存放以管理员权限安装的各类应用的默认设置,如 Microsoft OneDrive。
  • 用户目录隐藏文件夹:AppData\Roaming。存放适用于此用户的应用配置。如 Office。

此外:

  • 命令行工具,如 Git,Nodejs 的包,其配置文件一般在用户目录,可能被隐藏。

绿色软件配置文件在自己的文件夹内,UWP 软件被严格隔离在沙盒内,用户正常无法访问其目录;也有特殊的应用,配置文件可以自定义位置,我们能在应用内设置中发现其路径。

将文件们集中起来:硬链接和目录链接

为了更方便的管理和备份,需要创建一个包含所有配置文件的目录,但为了实时同步用户的更改,又不能用复制的方式。因此我们选择硬链接和目录链接。

关联阅读:符号链接、硬链接及其在 Windows 上的应用举例

将要使用的硬链接,我已经在上面文章简单说明了其原理和特性。硬链接只能指向同一卷已经存在的文件,这意味着我们必须把配置文件集中在系统盘内的一个目录

目录链接和符号链接类似,但只能用于目录。之所以使用目录链接而不是符号链接,是因为目录链接经微软调优过,Windows 系统自身各类目录的跳转也都使用目录链接,它具有更高的跳转效率以及同源目录更高的相似度,这样能避免一些奇怪问题。

遇到文件就使用硬链接,遇到目录就使用目录链接,创建的工具建议使用我在文中提到的 Link Shell Extension。

至于是把链接放在同步目录还是将真正的文件放在里面,我习惯采用后面的方案,这样似乎更有安全感。如果发现移动配置文件夹后应用出错,则选用前面的方案。

管理工具和选择性同步:Git 与 .gitignore

OneDrive 等云盘并非为了同步多而小的文件设计:像是坚果云有秘而不宣的同步频率限制,同步这类小文本有概率丢失文件。很多配置文件一旦打开相应的应用,就是被占用状态,云盘无法同步。另外这些云盘也无法做到精确的选择性同步。

OneDrive 同步文件被占用

因此我们使用天生为文本文件而设计的 Git,再使用 .gitignore 忽略掉无需跟踪的二进制文件。.gitignore 创建在 Git 库的根目录时对所有文件生效,创建在子文件夹时仅对该文件夹生效。

操作步骤

接下来我以用户根目录下 Git 的配置文件 .gitconfigRoaming 下 Everything 的设置文件夹以及配置目录在文档中的 ShareX 为例,展示具体操作步骤。

移动配置文件(夹)

在系统盘的用户目录的任意位置创建一个文件夹 Settings,作为集中管理这些配置文件的地方。用 git init 初始化。

然后,打开文件管理器设置中的「显示隐藏文件」,找到 Git、Everything 和 ShareX 的配置文件,在关闭这些应用的情况下,将文件或目录移动至 Settings 文件夹中。

创建链接

因为 .gitconfig 是一个文件,我们使用 Link Shell Extension 的中键拖拽功能,为它在原来的位置创建一个硬链接。

同样的道理,给 ShareX 和 Everything 创建目录链接。

此时,可以打开这些应用检验一下功能是不是正常,配置文件应该会继续生效。

忽略非关键文件

在这三个例子中,Git 和 Everything 配置文件夹中没有什么好忽略的,我们可以观察 ShareX 的文件夹结构以及文件内容:

不难发现,Logs、Backup 文件夹中记录的是运行的日志和定时保存的无用文件,无需备份。因此在 ShareX 目录创建 .gitignore 写入下面内容:

/Logs 
/Backup

提交到远程仓库并设置定时任务

一切准备就绪后,便能链接到远程仓库并提交了,在 GitHub 等处新建私人仓库后:

git add .
git commit -m "Settings 2021-07-21"
git remote add origin https://github.com/example/example.git
git push -u origin master

要设置定时提交,则可通过 Windows 任务计划程序和脚本,示例脚本如下:

$date = Get-Date -Format 'yyyy-MM-dd HH:mm'
cd $home/Settings
git add .
git commit -m "Autobackup $date"
git push -q

小结

在 Windows 中,用户在 GUI 上对应用设置的更改会以文本文件或二进制文件的形式被保存在特定的几个文件夹中,只要存留了应用配置文件,只需一次配置,就能在重装系统、更换电脑后让应用们恢复如初。

本文提供的方法是将所有需要备份的配置文件搬到同一个文件夹中,再用目录链接 & 硬链接的方式将他们链接到原位置。此配置文件夹使用 Git 做版本管理和备份工具,不需要上传的文件用 .gitignore 来精确控制。

只要能在本文提到的文件夹中发现配置文件的,包括 Windows 自己的一些设置,都可以试试本文的方法。

希望能给你以启发。

题图:Abstract vector created by vectorjuice

> 下载少数派 客户端、关注 少数派公众号,了解更妙的数字生活 🍃

> 想申请成为少数派作者?冲!