2009-09-11 59 views
35

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

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

  • 其他人使用版本控制来管理他们的配置文件吗?
  • 有什么提示可能会使这更容易?
  • 什么是处理计算机之间差异的最优雅的方式?
  • 我很喜欢git;任何其他建议?
+6

天哪,是的,人们肯定会使用配置文件的版本控制。我特别为窗口管理器配置文件来看它,但只需在GitHub上搜索“config”并查看所得到的结果即可。 – 2009-09-17 21:47:29

回答

14

目前,我使用克隆的git回购。为了简单起见,需要在不同机器之间变化的唯一文件是.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

您可以在每台计算机上拥有.bashrc.local文件,并且可以通过常见的.bashrc文件来源.bashrc.local。 .bashrc.local将具有特定于该机器的自定义(如颜色)。 – vaichidrewar 2013-10-06 02:07:10

1

git与自定义计算机的分支,在登录自动同步似乎是一个很好的解决方案给我。

我已经使用etckeeper进行版本控制配置,但我从未真正扩展到用户配置。

2

如果你使用git,你可以定义一个“起源”回购作为主;然后在你工作的每台电脑上做一个克隆。你可以为每台计算机使用一个分支来拥有你的一组配置文件。

3

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

+0

也为此+1 http://en.wikipedia.org/wiki/Cfengine – 2009-09-21 16:59:21

+0

或者puppet,chef,bcfg2和[others](http://en.wikipedia.org/wiki/Comparison_of_open_source_configuration_management_software)。 – Bash 2011-12-12 02:57:23

1

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

http://github.com/bstpierre/dotfiles

它不是完美的。目前存在与处理目录有关的错误,并且不支持跨计算机的变体。

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

+1

请在评论中解释一下,当你downvote – user89021 2010-01-02 15:54:43

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回购,一个漂亮的耙安装脚本别人写的。

+0

+1几乎是我做的同样的事 – 2009-09-17 21:45:22

+0

谢谢。 dotfiles回购非常有帮助! – Shuo 2013-05-17 00:57:16

+0

rake安装脚本与旧的bash脚本相比有什么好处?你有一个bzr仓库与github上的dotfiles仓库有区别吗?这听起来像是同样的解决方案,除了你现在只是使用git vs bzr和一个不同的安装脚本? – 2014-01-10 07:30:35

2
+1

+1。我也使用Dropbox。我也移动了多个操作系统,因此Dropbox中的大多数配置文件都有一个扩展名来表示它们在其上创建的操作系统。如果两个环境都相同,则无论扩展名如何,我都可以链接到同一个文件。例如,我有一个指向〜/ Dropbox/config/bash/profile.osx的.profile符号链接。在我的Linux机器上,它指向〜/ Dropbox/config/bash/profile.lin。 – 2009-09-21 18:16:42

2

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

+0

我使用松弛了很多。它重量轻,速度快,并且不受阻碍。在这里工作非常可靠。 – user89021 2010-01-02 15:56:22

1

我想你想可能是类似我一直在做什么......

让家中的目录名为.host_configs/。这是版本控制。或者在我的情况下,它住在中央计算机上的一个特殊文件夹中,我在任何一台新机器上查看它。在它里面为每个你想要不同配置的主机创建一个文件夹。每台主机的文件夹应该以该机器的简短主机名命名。因此,在您的git回购您有:

.host_configs/ 
      homecomp1/ 
      girlfriendcomp1/ 
      workcomp1/ 
      workcomp2/ 

在每个主机特定的文件夹,把.vimrc里,.irbrc等,配置文件的具体箱。 而且,在每个主机文件夹中创建一个名为.[SHORT_HOST]_rc的文件。例如,如果您的计算机名称为“理智”,则有一个名为.sane_rc的文件...此文件将包含通常位于.bashrc中的行,该行对于该主机是唯一的。例如,如果它是一个mac,它需要alias ls='ls -GF'而不是alias ls='ls --color=auto',它适用于大多数具有颜色的nix机器ls,将该行放在该机器的.[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文件加入到.bashrc中,然后将所有配置文件添加到结构化版本控制文件夹中)的功能比shell更加通用/不那么难看。因此,而不是在你的.bashrc以上的,有可能是:

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

...写你import_conf.rb做更复杂的conf管理,就像把一个特定的配置文件中的某些目录之外的家,或处理像.ssh /,.subversion /等配置文件夹。这就是我所做的,对我来说非常优雅,但可能有更好的解决方案。带有一些创意符号链接的Dropbox也是一个很好的主意,虽然你依赖的是第三方,并且你需要处于图形环境。另外请注意,如果您实现了某些想要在Windows上玩的东西,则可以在Linux中使用符号链接+保管箱和快捷键 + dropbox在Windows中执行的操作有不一致。

0

现在也有vcsh

自述:

VCSH - 通过假裸Git仓库管理$ HOME配置文件

[...]

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

完美的工作,但如果你不是一个有经验的git用户可能有点令人生畏。

相关问题