我有两台电脑,一台在公司,一台在家。工作用的那台电脑有一台运行 Arch 的 VM,而家里的那台则原生运行 Arch。工作用的那台电脑通常放在公司,但会用 git 来回推送很多东西,所以当我在一个地方处理某件事时,我可以在另一个地方继续我之前的工作。
我经常做的一件事就是调整配置文件,比如 Vim、ZSH、i3 等等,我真的厌倦了必须记住前一天晚上做了什么才能让下一台我正在使用的机器保持最新状态!
我知道这是 Git 的工作,但我该如何管理它呢?例如,我的主目录中的不同子目录中有一堆点文件。我不仅需要跟踪更改,还需要管理这些文件相对于它们在我可以创建的任何存储库中的位置。
另一件事是,其中一些点文件需要安装软件....因此,以 i3 为例:我在家用机器上安装了 i3,并根据我的喜好设置了配置文件...但是,上班时简单地拉取点文件没有多大意义,因为工作笔记本电脑上没有安装 i3!我还得记得安装这样那样的东西。另一个很好的例子是 python 模块...有时,我会完成一些事情,却忘记了必须安装作为 python 依赖项才能运行的模块的确切名称。在这种情况下,简单地拉取配置文件只是故事的一半...我需要一个脚本或其他东西来确保这些配置文件的后端是最新的并且到位。
我知道这是一个不太具体的问题,人们不喜欢在这里看到,但我也觉得这个问题有相当多的文档,介绍顶级 Unix/Linux 用户如何处理这个看似现实的管理任务。每个人提出的东西都非常不同,而且大多数问题似乎与从整个系统故障中恢复有关,而不是简单地在两台常用机器之间保持最新状态。
答案1
答案2
我通过将(大部分)点文件放入来解决这个问题~/dotfiles
,这是一个我定期推送到 github 的 git repo。
在此 repo 中,我还有一个在正确位置设置链接的脚本:
#!/bin/bash
for f in $(find -name ".*" -type f); do
if [[ -e $HOME/$f ]]; then
mv $HOME/$f $HOME/$f.old
fi
ln $f $HOME/$f
done
到目前为止,“正确的位置”只有$HOME
,但是否让脚本创建到其他地方的链接则取决于您。
我使用硬链接是因为 git 默认将符号链接保存为链接,但我确信有办法修复符号链接的问题。
在新版本中,我扩展了脚本以删除干扰配置文件,例如~/.config/git/gitk
。我也可以在那里设置链接,而不是在中$HOME
。
这听起来像是stow
做什么的,只是看起来很容易跳过涉及另一个工具。
我正在考虑将我的.emacs.d
和.xmonad
repos 作为子模块放在我的dotfiles
repo 中...虽然可能不值得麻烦,但我不太可能忘记--recursive
克隆。