有没有遇到过开始使用新电脑的情况,无论是自己选择还是因为旧电脑冒烟了,然后对让一切都恰到好处需要花费多长时间感到沮丧?更糟糕的是,有没有花时间重新配置您的 shell 提示符,然后意识到您更喜欢之前的设置?
对我来说,当我决定要在 容器 中进行开发时,这个问题变得尖锐起来。容器是短暂的。开发工具很容易解决:带有工具的容器镜像即可。源代码也很容易解决:源代码控制维护它,并且开发发生在分支上。但是,如果每次我创建一个容器时,都需要仔细配置它——那将会很痛苦。
家庭修订控制
将配置文件保存在版本控制中一直是一个有吸引力的选择。但是幼稚地这样做是令人担忧的。直接对 ~
进行版本控制是不可能的。
首先,太多程序认为将秘密保存在那里是安全的。它也是 ~/Downloads
和 ~/Pictures
等文件夹的位置,这些文件夹可能不应该进行版本控制。
在主目录中仔细维护 .gitignore
文件以管理包含和排除列表是危险的。在某些时候,其中一个路径会出错。数小时的配置丢失,大文件最终进入 Git 历史记录,或者,最糟糕的是,秘密和密码被泄露。当此策略失败时,它会灾难性地失败。
手动维护大量的符号链接也不起作用。版本控制的全部原因是为了避免手动维护配置。
编写安装脚本
这暗示了关于在源代码控制中维护点文件的第一个线索。编写安装脚本。
像所有好的安装脚本一样,使其幂等:运行两次不应添加两次配置。
像所有好的安装脚本一样,使其仅执行最少的操作:使用任何其他技巧来指向源代码控制中的配置文件。
~/.config 目录
现代 Linux 程序在直接在主目录中查找配置之前,会在 ~/.config
中查找其配置。最重要的示例是 git
,它在 ~/.config/git
中查找。
这意味着安装脚本可以将 ~/.config
符号链接到主目录中源代码控制管理的目录中
#!/bin/bash
set -e
DOTFILES="$(dirname $(realpath $0))"
[ -L ~/.config ] || ln -s $DOTFILES/config ~/.config
此脚本查找其位置,然后将 ~/.config
符号链接到签出到的位置。这意味着关于它需要位于主目录中的位置的假设很少。
源文件
大多数 shell 仍然直接在主目录中查找文件。为了解决这个问题,您添加了一层间接层。从 $DOTFILES
源文件意味着在修改 shell 配置时无需重新运行安装程序
$!/bin/bash
set -e
DOTFILES="$(dirname $(realpath $0))"
grep -q 'SETTING UP BASH' ~/.bashrc || \
echo "source $DOTFILES/starship.bash # SETTING UP BASH" >> ~/.bashrc
同样,请注意脚本很小心地保持幂等性:如果该行已存在,则不会再次添加它。它还考虑了您已对 .bashrc
进行的任何编辑。虽然这不是一个好主意,但没有必要惩罚它。
测试并再次测试
当您将环境保存在源代码控制中时,开发 VM 和容器将成为解决方案,而不是问题。尝试一个实验:启动一个新的开发环境,克隆您的点文件,安装,看看会发生什么故障。
不要只做一次。每周至少做一次。这使您更快地完成它,并且还可以告知您哪些不起作用——打开问题,修复它们,然后重复。
1 条评论