我通常在多台计算机上工作。我有各种配置文件,例如.bashrc
,.gitconfig
,.irbrc
,.vimrc
和配置文件夹,例如.vim/
,其中包含有价值的自定义项。
有时我想要在不同的计算机之间进行小的配置变化。
我想使用版本控制来管理这些不同的文件。
git
感到满意;还有其他建议吗?答案 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)
易。使用DropBox: http://www.nixtutor.com/linux/sync-config-files-across-multiple-computers-with-dropbox/
答案 5 :(得分:2)
我使用slack来表示类似的情况。 slack允许定义角色/子角色,因此您可以通过克隆文件或补丁来管理具有小变化的文件。然后在我的部署中由git管理slack目录。
答案 6 :(得分:2)
答案 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用户,可能会有点令人生畏。