我有许多不同的 Linux 机器,它们具有相似的“配置文件”。我想保持我的设置同步。例如vimrc
,,zshrc
。我遇到的问题是,它们是不同的 Linux 发行版,具有不同的设置和软件版本,例如,其中一些带有窗口系统,一些没有,一些有 Zsh,一些没有,一些有不同的版本。我意识到我可以通过 dropbox 或 github 等来设置我的设置。但随着环境变得更加复杂,这变得更加困难(我已经在 Github 上)。我还发现保持每台机器同步具有挑战性。这些大多是客户端计算机,具有不同的互联网连接(以及不同的网络,例如一些家庭和办公室,因此“推送”到计算机无法保持同步。我不希望解决方案会自动检测我的代码,例如zshrc
与旧版本不兼容,但最好能暗示这样的事情,这样它们就不会同步,也许是一个模板。
是否有任何现有的解决方案可以帮助我解决这个问题?
答案1
我可以告诉你我是做什么的。这可能是也可能不是您的最佳选择,具体取决于您拥有哪些程序的配置文件、机器之间的差异有多大,以及您愿意在编写可移植配置文件与每个版本之间重复维护方面投入多少精力或每个站点的文件。
我的所有配置文件都处于版本控制之下。我使用 CVS,它完全足以完成任务,但如果您现在开始(而不是 Linus 不相信版本控制时),您可以使用另一个版本控制系统。无论您是否有多次结帐,版本控制总是好的。为了同步站点之间的修改,我提交并更新。
我努力编写可移植的文件。例如,我的.zshrc
应该兼容 2.5 以来的所有版本(然而这有点牵强:我最近没有测试过它,上次我在 zsh 2.5 的机器上加载它时,速度真的很慢)。这意味着我有很多像if type someprogram >/dev/null 2>/dev/null
and 这样的东西case $ZSH_VERSION
(当我无法避免它时)。对于配置文件是解释性语言的其他程序(bash、Emacs、Vim、Fvwm、Sawfish 等)也是如此。我不想维护这些文件的单独版本,因此每个版本相关的定义都在条件语句下。如果你想减少麻烦(以支持更少的组合为代价),你可以这样做
case $ZSH_VERSION in
[5-9]*|4.[2-9].*) . ~/.zshrc-42;;
4.[01].*) . ~/.zshrc-40;;
3.1.[6789]) . ~/.zshrc-31;;
*) . ~/.zshrc-2;;
esac
ls
但还有其他系统依赖项(例如,您知道是否将其别名为gnuls --color -b
or ls --color -b
or colorls -G
or or …的版本ls -Fb
)。将所有内容分成单独的文件很快就会变得令人厌烦。
我保留一个包含每个站点设置的每个站点目录,这些设置由主文件加载。例如,我的.zshrc
包含行
if [ -r ~/Here/lib/shell/local.zshrc ]; then
. ~/Here/lib/shell/local.zshrc
fi
Here
是指向包含特定于站点的配置文件的目录的符号链接。它不存在于我未定制的网站上。本地.zshrc
通常包含别名、目录别名等。大多数站点都有.profile
一个定义一些环境变量的本地变量。所有特定于站点的配置都在同一版本控制系统下(将它们全部检查出来仅多了几 kB)。
一些文件是由 makefile 自动生成的。例如,我有一个脚本,可以~/.ssh/config
从通用主机列表(可从任何地方访问的计算机的别名和选项)以及特定于站点的主机列表(仅可在网络内访问的计算机)生成。
答案2
一般来说,在 UNIX 世界中,当您想要在多个主机(在同一环境中)之间保持这些内容同步时,您将使用auto_home
(自动挂载)在主机之间挂载您的主目录。
因此,如果您的所有主机都在同一网络中,这可能适合您。
否则,您可以设置主服务器并定期将您的 homedir 文件(.bash_profile、.vimrc 等)同步到目标主机。