Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 跨多台计算机管理用户配置文件_Linux_Git_Version Control_Configuration - Fatal编程技术网

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也是一个很好的主意,尽管您依赖于第三方,并且需要处于图形环境中。还要注意的是