如何优雅的管理配置文件(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做的事吧,目前应该是不可能。

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

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

不知道小众对于挖坟的态度,如果不支持的话提前说句抱歉
但是我最近一直在考虑如何更好地管理配置文件,也很好奇楼主最后是怎么管理的

其实不太理解为什么要管理?我觉得这样的形式很好,跟随着软件产生,软件卸载了也就没用了。
不过由此衍生出来了一个问题,有没有基于文件而不是目录的同步软件。

因为有操作多个设备的需求:笔记本、家用台式机、工作台式机、NAS、VPS等等
对于跨平台的应用和工具,我希望在这些设备上都能保持统一的使用体验,那么一个集中的 dotfiles 存储库就很有用处,这就跟用 git 跟踪管理 md 笔记是类似的道理

想问下,这是啥?
其实和我的想法有点类似,就是配置文件同步的问题了。

chezmoi 和 git 在 Linux 挺好使。你可以看看我的配置文件仓库。

1 Like

可以看看别人的博客文章管理点文件的尝试 | 空栈顶

dotfiles 现在可以视为一个专门指代工具软件的配置文件的名词(通常放在以 . 开头的文件夹中或配置文件以 . 开头放在用户家目录下)
然后喜欢动手折腾的用户就会想到把这些配置集中起来用 git 来管理(软件用多了配置文件散落在各处增加记忆负担)

原来点文件就是这个,虽然我觉得不同设备上的配置有部分相同,有部分不同,都能兼顾到是好的,但这么操作起来太麻烦了。 :rofl: