跨多台计算机管理用户配置文件

时间:2009-09-11 20:17:39

标签: linux git version-control configuration

我通常在多台计算机上工作。我有各种配置文件,例如.bashrc.gitconfig.irbrc.vimrc和配置文件夹,例如.vim/,其中包含有价值的自定义项。 有时我想要在不同的计算机之间进行小的配置变化。

我想使用版本控制来管理这些不同的文件。

  • 其他人是否使用版本控制来管理他们的配置文件?
  • 有哪些提示可以使这更容易?
  • 处理计算机之间差异的最优雅方式是什么?
  • 我对git感到满意;还有其他建议吗?

11 个答案:

答案 0 :(得分:17)

我在~/config/保留了一个文件夹,这是一个bzr存储库。我在各种计算机之间推/拉存储库以进行同步。我有一个安装脚本,我用它来创建符号链接到我的主目录:

#! /bin/sh
# link all files to the home directory, asking about overwrites
cd `dirname $0`
SCRIPT_DIR=`pwd`
SCRIPT_NAME=`basename $0`
FILES=`bzr ls --versioned --non-recursive`

cd $HOME
for FILE in $FILES; do
    ln --symbolic --interactive $SCRIPT_DIR/$FILE
done
rm $TARGET_DIR/$SCRIPT_NAME

如果你想使用git而不是bzr,你可以使用:

FILES=`git ls-tree --name-only HEAD`

(我必须ask SO来解决这个问题)

编辑:我实际上不再这样做了,现在我在github上有一个dotfiles个repo,有一个别人写的漂亮的rake安装脚本。

答案 1 :(得分:14)

目前,我使用克隆的git repo。为了简单起见,不同机器之间需要变化的唯一文件是.bashrc。如果只有一个版本的文件在不同的机器上响应不同,那就太好了。因此,在我的.bashrc

if [ $(hostname) == 'host1' ]; then
     # things to do differently on host1.
elif [ $(hostname) == 'host2' ]; then
     # things to do differently on host2.
fi

这显然有一些限制(例如.vimrc或其他需要自定义的配置文件需要不同的技术),但效果相当好。

答案 2 :(得分:3)

如果你使用git,你可以定义一个“origin”repo作为master;然后在您工作的每台计算机上进行克隆。您可以使用每个计算机的分支来获取您的配置文件集。

答案 3 :(得分:3)

使用CfEngine,您可以跨机器管理配置文件,还可以执行更多操作! 学习曲线可能有点高,但如果您必须定期管理/更新/维护运行Linux的计算机池,那么它就值得一试。

答案 4 :(得分:2)

答案 5 :(得分:2)

我使用slack来表示类似的情况。 slack允许定义角色/子角色,因此您可以通过克隆文件或补丁来管理具有小变化的文件。然后在我的部署中由git管理slack目录。

答案 6 :(得分:2)

以下是一些dotfile管理员:

答案 7 :(得分:1)

带有自定义计算机分支的

git,在登录时自动同步对我来说似乎是一个很好的解决方案。

我已将etckeeper用于版本配置,但我从未真正扩展到用户配置。

答案 8 :(得分:1)

这种问题偶尔出现,我从未见过处理这种常见用例的工具,因此我编写了一个使用git和符号链接来管理这些文件的脚本。

请参阅http://github.com/bstpierre/dotfiles

这不完美。目前存在与处理目录相关的错误,并且还没有支持计算机之间的变体。

在使用此类任何工具之前,请确保备份良好!

答案 9 :(得分:1)

我认为你想要的可能与我一直在做的相似......

在家中创建一个名为.host_configs/的目录。这是版本控制的。或者在我的情况下,它存在于中央计算机上的一个特殊文件夹中,我把它放在任何新机器上。在里面它为你想要不同配置的每个主机创建一个文件夹。每个主机的文件夹应以该机器的短主机名命名。所以在你的git repo中你有:

.host_configs/
           homecomp1/
           girlfriendcomp1/
           workcomp1/
           workcomp2/

在每个主机特定文件夹中,为该特定框放置.vimrc,.irbrc等配置文件。 此外,在每个主机文件夹中创建一个名为.[SHORT_HOST]_rc的文件。例如,如果您的机器名称为“sane”,则会有一个名为.sane_rc的文件...此文件将包含通常位于.bashrc中且该主机唯一的行。例如,如果它是一个mac并且它需要alias ls='ls -GF'而不是alias ls='ls --color=auto',它适用于大多数带有颜色的ls的nix机器,请将该行放在.[SHORT_HOST]_rc的那台机器上,以及通常会进入.bashrc或.profile等的任何特殊函数,声明等(或.zshrc,.tschrc,视情况而定)。因此受版本控制的~/.host_configs/文件夹如下所示:

.host_configs/
           homecomp1/
                    .homecomp1_rc        #special shell configs for this hostname
                    .vimrc               #you know the rest
                    .irbrc
                    .Xresources
           girlfriendcomp1/
                    .girlfriendcomp1_rc
                    .vimrc
                    .bubblebathrc
           workcomp1/
                    .workcomp1_rc
                    .bashrc
                    .vimrc
           workcomp2/
                    .workcomp2_rc
                    .bashrc
                    .vimrc

我在所有机器上使用所有相同的准系统$ HOME / .bashrc(或〜/ .tshrc等)。我只是采用有问题的发行版附带的基本版本,并将所有特定于主机的配置移动到.host-configs/[SHORT_HOST]/.[SHORT_HOST]_rc文件中。

把它放在底部($HOME/.bashrc):

export SHORT_HOST="sane"
for file in `find ~/.host_configs/$SHORT_HOST -name ".*"`
do
ln -s $file `basename $file`
done
source ~/`.$SHORT_HOST`_rc

(查找主机的所有点文件,并在~/.host_configs/foo_host文件夹的主页中创建符号链接)。 您的点文件位于其正常位置,但它们符号链接到版本控制。以上内容还将[$SHORT_HOST]_rc文件中的所有行都输入.bashrc

只要有更改,您就可以从~/.host_configs/文件夹返回git。

这就是它在shell中的样子,这可能就是你所需要的,但如果你需要其他功能,我会写一些使用相同原理的东西(将.rc文件中的外部.rc文件和symlinking所有的配置文件在结构化版本控制文件夹中,比shell更通用/更难看。因此,除了.bashrc中的上述内容之外,还有:

export SHORT_HOST="sane"
ruby ~/import_conf.rb $SHORT_HOST

...并编写你的import_conf.rb以进行更复杂的conf管理,例如将特定配置文件放在除了home之外的某个目录中,或者处理配置文件夹,如.ssh /,.subversion /等。这就是我所做的,它对我来说非常优雅,但可能有更好的解决方案。带有一些创意符号链接的Dropbox也是一个很好的主意,虽然你依赖于第三方,但你需要处于图形环境中。另请注意,如果您实现了想要使用Windows的内容,那么在Linux中使用符号链接+ dropbox和在Windows中使用快捷方式 + dropbox可以执行的操作之间存在不一致。

答案 10 :(得分:0)

现在还有vcsh

来自自述文件:

vcsh - 通过虚假的裸git存储库管理$ HOME中的配置文件

[...]

vcsh允许你拥有几个git存储库,所有这些存储库都在$ HOME中维护它们的工作树而不会互相破坏。反过来,这意味着您可以为每个配置集(zsh,vim,ssh等)设置一个存储库,挑选并选择要在哪台计算机上使用的配置。

完美无缺,但如果您不是经验丰富的git用户,可能会有点令人生畏。