跨多台计算机pipe理用户configuration文件

我通常在多台电脑上工作。 我有各种configuration文件,例如, .bashrc.gitconfig.irbrc.vimrc和configuration文件夹,例如.vim/包含有价值的自定义。 有时我需要在不同计算机之间的configuration上有小的变化。

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

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

我在~/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` 

(我不得不问这个)

编辑:我实际上不再这样做,现在我有一个github dotfiles回购,有一个很好的耙安装脚本,别人写的。

目前,我使用克隆的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或其他configuration文件需要使用不同的技术),但是效果相当好。

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

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

简单。 使用DropBox的: http ://www.nixtutor.com/linux/sync-config-files-across-multiple-computers-with-dropbox/

我使用松弛类似的情况。 slack允许定义angular色/子angular色,因此您可以通过克隆的文件或补丁来pipe理文件的变化很小。 松散目录然后由我的部署中的gitpipe理。

这里有一些dotfile文件pipe理器:

  • 想家 :基于Ruby
  • homeshick :和第一个一样,但没有ruby依赖
  • dfm :用Perl编写

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

我已经使用etckeeper进行版本configuration,但是我从来没有真正扩展到用户configuration。

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

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

这并不完美。 目前有一个与处理目录有关的错误,并且不支持跨计算机的变化。

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

我想你想要的可以和我一直在做的事情类似

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

 .host_configs/ homecomp1/ girlfriendcomp1/ workcomp1/ workcomp2/ 

在每个主机特定的文件夹中,放置该特定框的.vimrc,.irbrc等configuration文件。 而且,在每个主机文件夹中创build一个名为.[SHORT_HOST]_rc的文件。 例如,如果您的计算机名称为“sane”,则有一个名为.sane_rc的文件…此文件将包含通常位于.bashrc中的行,该行对于该主机是唯一的。 例如,如果它是一个mac,它需要alias ls='ls -GF'而不是alias ls='ls --color=auto' ,它适用于大多数具有颜色的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等)。 我只是将相关发行版随附的基本configuration,并将所有主机特定configuration移到.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文件夹中创build一个符号链接)。 你的点文件是在他们的正常位置,但它们符号链接到版本控制。 上面还将[$SHORT_HOST]_rc文件中的所有[$SHORT_HOST]_rc放到.bashrc中

只要你有改变,你可以从~/.host_configs/文件夹提交回git。

这就是它在shell中的样子,这可能是你所需要的,但是如果你需要其他的function,我会写一些使用相同原理的东西(将一个外部的.rc文件放到.bashrc中,并把所有的configuration文件符号化到结构版本控制文件夹)的东西更多function/不那么难看比壳。 所以,而不是你的.bashrc上面,可能是:

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

…并编写你的import_conf.rb来做更复杂的confpipe理,比如把一个特定的configuration文件放在家里以外的某个目录下,或者处理一个像.ssh /,.subversion /这样的configuration文件夹。这就是我所做的,很漂亮对我优雅,但可能有更好的解决scheme。 有一些创意符号链接的Dropbox也是一个很好的主意,虽然你依赖的是第三方,而你需要在graphics化的环境中。 另外请注意,如果您实现了某些想要在Windows上运行的内容,则可以使用Linux中的符号链接+保pipe箱和Windows中的快捷方式 +保pipe箱执行什么不一致的操作。

现在也有vcsh

从自述文件:

vcsh – 通过伪装的git存储库pipe理$ HOME中的configuration文件

[…]

vcsh允许你有几个git仓库,所有的维护他们的工作树在$ HOME而不会相互打破。 这反过来又意味着您可以为每个configuration集(zsh,vim,ssh等)configuration一个存储库,然后select并select要在哪台机器上使用的configuration。

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