您是否曾经开始使用一台新计算机,无论是出于选择还是因为旧计算机让您的魔力消失了,并且想知道需要多长时间才能完成所有工作感到沮丧,这一切都解决了?更糟糕的是,是否曾花一些时间重新配置您的shell提示符并意识到您更喜欢以前的方式?对我来说,当我决定在容器中进行开发时,这个问题就变得严重了。容器是非持久性的。开发工具很容易解决:一个带有工具的容器镜像就可以了。源代码很容易解决:源代码管理维护它,开发在一个分支上。但是如果每次创建容器都需要仔细配置,太痛苦了。主目录的版本控制将配置文件保存在版本控制中一直是一个有吸引力的选择。但天真地这样做是令人担忧的。无法直接对~进行版本控制。首先,太多的程序认为把秘密放在那里是安全的。此外,它是~/Downloads和~/Pictures等文件夹的位置,可能不应该对其进行版本控制。小心地在您的主目录中保留一个.gitignore文件来管理包含和排除列表是有风险的。在某些时候,其中一条路径会出错,花费数小时的配置会丢失,大文件会出现在Git历史记录中,或者最糟糕的是,机密和密码会泄露。当这个策略失败时,它就变成了灾难性的失败。手动维护大量符号链接也不可行。版本控制的全部原因是为了避免手动维护配置。编写安装脚本这暗示了在源代码管理中维护点文件的第一条线索:编写安装脚本。像所有好的安装脚本一样,让它幂等:运行它两次不会增加配置两次。像所有好的安装脚本一样,让它做最少的事情:使用其他技巧指向源代码管理中的配置文件。~/.config目录现代Linux程序在直接查看主目录之前先在~/.config中查找配置。最重要的例子是git,它在~/.config/git中查找。这意味着安装脚本可以将~/.config符号链接到主目录中源代码管理的管理目录中的目录:#!/bin/bashset-eDOTFILES="$(dirname$(realpath$0))"[-L~/.config]||ln-s$DOTFILES/config~/.config该脚本查找它的位置,然后将~/.config链接到它被签出的位置。这意味着对于它需要在主目录中的位置几乎没有任何假设。获取文件大多数shell仍然直接在主目录中查找文件。为了解决这个问题,你添加了一层指令。从$DOTFILES抓取文件意味着在修改shell配置时不需要重新运行安装程序。$!/bin/bashset-eDOTFILES="$(dirname$(realpath$0))"grep-q'设置BASH'~/.bashrc||\echo"source$DOTFILES/starship.bash#SETTINGUPBASH">>~/.bashrc再次注意这个脚本是幂等的:如果该行已经存在,它不会添加它。它还会考虑您对.bashrc所做的任何编辑,虽然这不是一个好主意,但没有必要对其进行惩罚。迭代测试当您将环境保持在源代码控制中时,为VM和容器开发成为一种解决方案,而不是问题。尝试做一个实验。设置一个新的开发环境,克隆你的点文件,安装,看看有什么问题。不要只做一次。每周至少做一次。这将使您能够更快地完成工作,同时还可以向您展示什么是无效的。暴露问题,解决问题,然后重复。
