代码之家  ›  专栏  ›  技术社区  ›  Peter

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

  •  35
  • Peter  · 技术社区  · 16 年前

    我通常在多台电脑上工作。我有各种配置文件,例如, .bashrc ,请 .gitconfig , .irbrc , .vimrc 和配置文件夹,例如, .vim/ 包含有价值的定制。 有时我希望不同计算机之间的配置有细微的变化。

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

    • 其他人是否使用版本控制来管理他们的配置文件?
    • 有什么提示可以让这更容易?
    • 处理计算机之间的差异最优雅的方法是什么?
    • 我觉得很舒服 git 有其他建议吗?
    11 回复  |  直到 12 年前
        1
  •  17
  •   Community Mohan Dere    8 年前

    我把文件夹放在 ~/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 为了解决这个问题)

    编辑: 实际上我不再这样做了,现在我有了 dotfiles 在Github上使用其他人编写的一个不错的rake安装脚本进行repo。

        2
  •  14
  •   Peter    16 年前

    目前,我使用的是克隆的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 或者其他需要定制的配置文件),但是它工作得相当好。

        3
  •  3
  •   unsafe_where_true    16 年前

    如果使用git,可以定义一个“源站”repo作为主服务器;然后在您工作的每台计算机上进行克隆。您可以为每台计算机使用一个分支来拥有一组配置文件。

        4
  •  3
  •   jdehaan    16 年前

    CfEngine 您可以跨机器管理配置文件,还可以做更多的事情! 学习曲线可能有点高,但如果你必须管理/更新/维护一个定期运行Linux的计算机池,这是值得的。

        6
  •  2
  •   phsiao    16 年前

    我用 slack 对于类似的情况。slack允许定义角色/子角色,因此您可以通过克隆文件或修补程序来管理变化较小的文件。然后,可宽延目录在我的部署中由Git管理。

        7
  •  2
  •   rorrohprog    12 年前

    以下是一些点文件管理器:

        8
  •  1
  •   Ben S    16 年前

    git 对于我来说,使用自定义计算机的分支,在登录时使用自动同步似乎是一个很好的解决方案。

    我已经用过 etckeeper 对于版本控制配置,但实际上我从未扩展到用户配置。

        9
  •  1
  •   bstpierre Edgar Aviles    16 年前

    这种问题偶尔会出现,我从来没有见过处理这个常见用例的工具,所以我编写了一个使用git和symlinks来管理这些文件的脚本。

    http://github.com/bstpierre/dotfiles

    它并不完美。目前有一个与处理目录相关的bug,而且还不支持跨计算机的变体。

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

        10
  •  1
  •   Community Mohan Dere    14 年前

    我想你想要的可能和我一直在做的一样…

    在主目录中创建一个名为 .host_configs/ . 这是版本控制。或者在我的例子中,它位于中央计算机上的一个特殊文件夹中,我把它放到任何一台新机器上。在它里面,为每个需要不同配置的主机创建一个文件夹。每个主机的文件夹应以该计算机的短主机名命名。所以在你的Git回购中,你有:

    .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 用颜色,把那条线 [短主机] 对于该机器,以及通常进入.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
    

    我在所有的机器上都使用相同的bareboons$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

    你可以从 ~/.主机配置/ 文件夹,只要您有更改。

    这就是shell中的情况,这可能是您所需要的,但是如果您需要其他功能,我会在比shell更通用/不那么难看的东西中编写一些使用相同原则(将外部.rc文件寻源到.bashrc并将所有配置文件符号链接到结构化版本控制文件夹)的东西。因此,在您的.bashrc中,可能会有:

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

    …然后编写import-conf.rb来进行更复杂的conf管理,比如在home之外的某个目录中放置一个特定的配置文件,或者处理一个config文件夹,如.ssh/、.subversion/etc。这就是我要做的,它对我来说相当优雅,但是可能有更好的解决方案。Dropbox带有一些创造性的符号链接也是一个很好的主意,尽管您依赖于第三方,并且需要在图形环境中。还要注意,在Linux和 捷径 +如果您实现了一些想要与Windows一起播放的内容,则为Windows中的Dropbox。

        11
  •  0
  •   sleepyMonad    14 年前

    现在还有 vcsh

    从自述文件:

    vcsh-通过伪造的裸Git存储库管理$home中的配置文件

    […]

    VCSH允许您拥有多个Git存储库,所有这些存储库都在$home中维护它们的工作树,而不会相互攻击。反过来,这意味着您可以为每个配置集(zsh、vim、ssh等)设置一个存储库,选择要在哪台机器上使用的配置。

    工作得很好,但如果你不是一个有经验的git用户,可能会有点吓人。