跨多台计算机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用户可能有点令人生畏。