如何优雅的管理配置文件(dotfile)?

困难

各位好,每天在和软件打交道,是不是一大堆软件配置?现在在windows上软件越来越多支持配置文件,如.ini等,不再依赖注册表,终于和linux一样方便移动,但这又引来一个问题,怎么管理?

windows上的配置文件可以通过各种同步软件同步,但前提是在一个文件夹下。如果链接单个文件,不少软件可能直接覆盖上去,这样链接就失效了。

不过还是还是有可以一个同步一个文件的,比如syncthing可以忽略文件夹下的其他文件。不过这些软件还有其他问题,比如不能根据系统类型等变量自定义配置,路径中不可使用环境变量。

不过同步的方案对于不复杂的配置还是很方便的。

问题是,我现在需要一个跨平台,高度自定义的配置文件管理器,一步到位。

可能的答案

其实github上可以支持windows的配置文件管理器就很少。我试过的有chezmoidotter

chezmoi

添加文件和编辑都通过命令行,非常优雅,不愧是第一,不过在windows上似乎有很多限制?比如只能添加用户目录(%USERPROFILE%)下的文件,应该是软件本身的逻辑,自然不能支持在路径解析变量,不过软件本身非常强大,不仅支持模板,还支持各种密码管理器,保护隐私。

支持自动更新git仓库,但是还是需要执行命令更新到文件。

dotter

新项目,添加文件的方式就是手动复制过去,可以在路径中支持环境变量。命令比较少。同样支持模板。

可以不用git仓库,本质就是一个快速的链接工具。有一个watch指令,可以自动更新文件。

你可以直接放在一个文件夹中,用这个目录作为工作目录(不然你要指定一长串目录),部署文件,不过这种方式实在不够优雅。

其他

有很多shell项目,不过不支持windows就是了。

同步软件其实也是一种办法,虽然可能有一些缺点,但是因为指向文件夹的,不同于上面基于git的管理器,可以自动添加文件,可以用在firefox之类会生成大量文件的软件上。

抛砖引玉

那么,你在用什么管理你的配置文件?有什么好的方案?可以分享一下吗?

stow?

标准答案?windows的话可以通过wsl绕过去?

从软件自身来看,最好的做法是 没有任何ini时,软件能自动创建一个基本能用的ini,允许用户或软件根据实际情况得到更合理的配置更新到ini。
这也算是 绿色软件 的基本要求吧。
这样,发布软件时,不用附带任何ini,也就不存在ini被覆盖的问题了。

恩?不知道是不是我解释错了,在windows中创建的文件链接,一般会被一个实体文件覆盖,软件可能是在保存配置文件变动时,删除了原来的文件,再创建一个新的文件。

所以在windows中,只有文件夹是可靠的链接,一些软件也不会单独为配置文件放一个文件夹。

syncthing那种实现方法,已经是非常简单方便的同步文件方式,但是syncthing自己的配置文件非常复杂,不能复用配置文件,因为安全问题。这意味着不能快速部署到新电脑,必须手动一个个添加文件夹一遍。每次新的配置都需要点一遍,实在不够优雅。

相对来说,dotter非常自由,但是缺少优雅,但目前也只能功能优先了。

总的来说,我想不出什么好的办法,

或者我思路本来就错了,或者打包整个软件?

我说的 软件 是 被dotter管理的对象们,它们应该怎么维护自己的ini

另外,【管理配置文件】的背景需求是什么?
给企业各个员工?给自己的不同电脑?

dotter管理的文件?没有影响,他们的变动不会保存到dotter的仓库中,只有直接修改dotter仓库的文件才可能影响dotter。dotter对于文件夹也是递归链接,所以基本上是一个单向的文件复制。

配置文件当然是自己用,如果是企业用的,那可能要ansible之类的了。

写个批处理脚本吧。

个人的 ini 也没多少,为每个配置文件添加一行:源、目标,写到一个 txt、csv 文件中

再写两个 bat 或 py 脚本

  • 一个用于将记录的 ini 复制到当前目录
  • 一个用于将当前目录的 ini 还原

把这个文件夹备份到 git

我思考了一下,是我自己的想法出了问题。我实际上想要一种能结合同步和模板的东西,或者某种自动的方式。

用模板也好,或者你说的脚本也好,一旦使用了,源文件和目标文件就不一样了,也没有办法把变动反向更新到源文件上。

就是使用模板或者变量等,就不能使用同步。

最多就是用其他东西快速定位到配置文件,可以方便一点。

除非有一种嵌入的东西可以逆向到源文件……这应该是AI做的事吧,目前应该是不可能。

或者配置文件出现一种通用语言,一种标准。只要所有软件共用一些变量,就不需要在上游使用模板。

最后谢谢各位的建议,给我很多帮助,谢谢。