Linux 跨多台计算机管理用户配置文件
我通常在多台计算机上工作。我有各种配置文件,例如,Linux 跨多台计算机管理用户配置文件,linux,git,version-control,configuration,Linux,Git,Version Control,Configuration,我通常在多台计算机上工作。我有各种配置文件,例如,.bashrc,.gitconfig,.irbrc,.vimrc和配置文件夹,例如,.vim/,它们包含有价值的定制。 有时我希望不同计算机之间的配置有细微的差异 我想使用版本控制来管理这些不同的文件 其他人是否使用版本控制来管理其配置文件 有什么提示可以让这更容易 处理计算机之间的差异最优雅的方式是什么 我对git感到很舒服;还有其他建议吗 git带有自定义计算机的分支,在登录时自动同步对我来说似乎是一个很好的解决方案 我曾使用过版本控制配置
.bashrc
,.gitconfig
,.irbrc
,.vimrc
和配置文件夹,例如,.vim/
,它们包含有价值的定制。
有时我希望不同计算机之间的配置有细微的差异
我想使用版本控制来管理这些不同的文件
- 其他人是否使用版本控制来管理其配置文件
- 有什么提示可以让这更容易
- 处理计算机之间的差异最优雅的方式是什么
- 我对git感到很舒服;还有其他建议吗
git
带有自定义计算机的分支,在登录时自动同步对我来说似乎是一个很好的解决方案
我曾使用过版本控制配置,但实际上从未扩展到用户配置。如果使用git,可以将“源”repo定义为主;然后在你工作的每台计算机上进行克隆。您可以为每台计算机使用一个分支来拥有一组配置文件。使用该分支,您可以跨多台计算机管理配置文件,还可以执行更多操作!
学习曲线可能有点高,但如果你必须定期管理/更新/维护运行linux的计算机池,那么它是值得的。目前,我使用克隆的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
export SHORT_HOST="sane"
for file in `find ~/.host_configs/$SHORT_HOST -name ".*"`
do
ln -s $file `basename $file`
done
source ~/`.$SHORT_HOST`_rc
这显然有一些局限性(例如,
.vimrc
或其他需要定制的配置文件需要不同的技术),但它工作得相当好。这种问题偶尔会出现,我从未见过处理这种常见用例的工具,因此,我编写了一个脚本,使用git和符号链接来管理这些文件
看
它并不完美。目前存在一个与处理目录相关的bug,目前还不支持跨计算机的变体
在使用任何此类工具之前,请确保您有良好的备份 我在
~/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上有了一个repo,还有一个别人编写的漂亮的rake安装脚本。很简单。请使用DropBox:
我使用它来处理类似的情况。slack允许定义角色/子角色,因此您可以通过克隆文件或修补程序管理变化较小的文件。然后,在我的部署中,slack目录由git管理。我认为您想要的可能与我一直在做的类似 在home中创建一个名为
.host\u configs/
的目录。这是版本控制的。或者,在我的情况下,它位于中央计算机上的一个特殊文件夹中,我将它保存在任何新机器上。在它里面,为每个需要不同配置的主机创建一个文件夹。每个主机的文件夹应以该计算机的短主机名命名。因此,在您的git回购中,您有:
.host_configs/
homecomp1/
girlfriendcomp1/
workcomp1/
workcomp2/
在每个特定于主机的文件夹中,放入该特定框的.vimrc、.irbrc等配置文件。
此外,在每个主机文件夹中创建一个名为[SHORT\u host]\u rc
的文件。例如,如果您的计算机名为“sane”,则有一个名为.sane_rc的文件。。。此文件将包含该主机特有的.bashrc中通常包含的行。例如,如果它是一台mac电脑,它需要别名ls='ls-GF'
而不是别名ls='ls--color=auto'
,它适用于带有颜色的ls
的大多数nix机器,请将该行放入该机器的[SHORT\u HOST]\u rc
,以及任何特殊函数、声明等,这通常会进入.bashrc或.profile等(或.zshrc、.tschrc,视情况而定)。因此,版本控制的~/.host\u 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\u host]/[SHORT\u host]\u rc
文件中
把这个放在下面(在$HOME/.bashrc
的底部):
(查找主机的所有点文件,并在主目录中创建指向~/.host\u configs/foo\u host
文件夹的符号链接)。
您的点文件位于其正常位置,但它们已符号链接到版本控制。上面的代码还将[$SHORT\u HOST]\u rc
文件中的所有行都源于.bashrc
只要有更改,就可以从~/.host\u configs/
文件夹提交回git
这就是shell中的外观,这可能是您所需要的,但是如果您需要其他功能,我将使用相同的原则(将外部.rc文件源化到.bashrc中,并将所有配置文件符号链接到结构化版本控制文件夹)编写一些比shell更通用/不那么难看的东西。因此,除了.bashrc中的上述内容之外,还可以有:
export SHORT_HOST="sane"
ruby ~/import_conf.rb $SHORT_HOST
…并编写import_conf.rb来执行更复杂的conf管理,比如将特定的配置文件放在home之外的某个目录中,或者处理.ssh/、.subversion/等配置文件夹。这就是我所做的,对我来说非常优雅,但可能有更好的解决方案。带有一些创造性符号链接的Dropbox也是一个很好的主意,尽管您依赖于第三方,并且需要处于图形环境中。还要注意的是