2009-09-11 86 views
35

我通常在多臺計算機上工作。我有各種配置文件,例如,.bashrc,.gitconfig,.irbrc,.vimrc和配置文件夾,例如.vim/包含有價值的自定義。有時我想在不同的計算機之間進行配置的細微變化。跨多臺計算機管理用戶配置文件

我想使用版本控制來管理這些不同的文件。

  • 其他人使用版本控制來管理他們的配置文件嗎?
  • 有什麼提示可能會使這更容易?
  • 什麼是處理計算機之間差異的最優雅的方式?
  • 我很喜歡git;任何其他建議?
+6

天哪,是的,人們肯定會使用配置文件的版本控制。我特別爲窗口管理器配置文件來看它,但只需在GitHub上搜索「config」並查看所得到的結果即可。 – 2009-09-17 21:47:29

回答

14

目前,我使用克隆的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或其他配置文件需要定製),但它的作品相當不錯。

+3

您可以在每臺計算機上擁有.bashrc.local文件,並且可以通過常見的.bashrc文件來源.bashrc.local。 .bashrc.local將具有特定於該機器的自定義(如顏色)。 – vaichidrewar 2013-10-06 02:07:10

1

git與自定義計算機的分支,在登錄自動同步似乎是一個很好的解決方案給我。

我已經使用etckeeper進行版本控制配置,但我從未真正擴展到用戶配置。

2

如果你使用git,你可以定義一個「起源」回購作爲主;然後在你工作的每臺電腦上做一個克隆。你可以爲每臺計算機使用一個分支來擁有你的一組配置文件。

3

使用CfEngine您可以跨機器管理配置文件,還可以做更多的事情! 學習曲線可能有點高,但如果您必須定期管理/更新/維護一個運行Linux的計算機池,那麼學習曲線可能有點高。

+0

也爲此+1 http://en.wikipedia.org/wiki/Cfengine – 2009-09-21 16:59:21

+0

或者puppet,chef,bcfg2和[others](http://en.wikipedia.org/wiki/Comparison_of_open_source_configuration_management_software)。 – Bash 2011-12-12 02:57:23

1

這種問題偶爾會出現,而我從來沒有見過處理這種常見用例的工具,所以我編寫了一個使用git和符號鏈接來管理這些文件的腳本。

http://github.com/bstpierre/dotfiles

它不是完美的。目前存在與處理目錄有關的錯誤,並且不支持跨計算機的變體。

在使用任何此類工具之前,請確保您有良好的備份!

+1

請在評論中解釋一下,當你downvote – user89021 2010-01-02 15:54:43

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回購,一個漂亮的耙安裝腳本別人寫的。

+0

+1幾乎是我做的同樣的事 – 2009-09-17 21:45:22

+0

謝謝。 dotfiles回購非常有幫助! – Shuo 2013-05-17 00:57:16

+0

rake安裝腳本與舊的bash腳本相比有什麼好處?你有一個bzr倉庫與github上的dotfiles倉庫有區別嗎?這聽起來像是同樣的解決方案,除了你現在只是使用git vs bzr和一個不同的安裝腳本? – 2014-01-10 07:30:35

2
+1

+1。我也使用Dropbox。我也移動了多個操作系統,因此Dropbox中的大多數配置文件都有一個擴展名來表示它們在其上創建的操作系統。如果兩個環境都相同,則無論擴展名如何,我都可以鏈接到同一個文件。例如,我有一個指向〜/ Dropbox/config/bash/profile.osx的.profile符號鏈接。在我的Linux機器上,它指向〜/ Dropbox/config/bash/profile.lin。 – 2009-09-21 18:16:42

2

我使用slack也有類似的情況。 slack允許定義角色/子文件,因此您可以通過克隆的文件或補丁來管理文件變動較小的文件。鬆散目錄然後由我的部署中的git管理。

+0

我使用鬆弛了很多。它重量輕,速度快,並且不受阻礙。在這裏工作非常可靠。 – user89021 2010-01-02 15:56:22

1

我想你想可能是類似我一直在做什麼......

讓家中的目錄名爲.host_configs/。這是版本控制。或者在我的情況下,它住在中央計算機上的一個特殊文件夾中,我在任何一臺新機器上查看它。在它裏面爲每個你想要不同配置的主機創建一個文件夾。每臺主機的文件夾應該以該機器的簡短主機名命名。因此,在您的git回購您有:

.host_configs/ 
      homecomp1/ 
      girlfriendcomp1/ 
      workcomp1/ 
      workcomp2/ 

在每個主機特定的文件夾,把.vimrc裏,.irbrc等,配置文件的具體箱。 而且,在每個主機文件夾中創建一個名爲.[SHORT_HOST]_rc的文件。例如,如果您的計算機名稱爲「理智」,則有一個名爲.sane_rc的文件...此文件將包含通常位於.bashrc中的行,該行對於該主機是唯一的。例如,如果它是一個mac,它需要alias ls='ls -GF'而不是alias ls='ls --color=auto',它適用於大多數具有顏色的nix機器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等)。我只是將相關發行版隨附的基本配置,並將所有主機特定配置移至.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文件加入到.bashrc中,然後將所有配置文件添加到結構化版本控制文件夾中)的功能比shell更加通用/不那麼難看。因此,而不是在你的.bashrc以上的,有可能是:

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

...寫你import_conf.rb做更復雜的conf管理,就像把一個特定的配置文件中的某些目錄之外的家,或處理像.ssh /,.subversion /等配置文件夾。這就是我所做的,對我來說非常優雅,但可能有更好的解決方案。帶有一些創意符號鏈接的Dropbox也是一個很好的主意,雖然你依賴的是第三方,並且你需要處於圖形環境。另外請注意,如果您實現了某些想要在Windows上玩的東西,則可以在Linux中使用符號鏈接+保管箱和快捷鍵 + dropbox在Windows中執行的操作有不一致。

0

現在也有vcsh

自述:

VCSH - 通過假裸Git倉庫管理$ HOME配置文件

[...]

vcsh允許你有幾個git倉庫,所有的工作樹在$ HOME中都沒有互相破壞。反過來,這意味着您可以爲每個配置集(zsh,vim,ssh等)選擇一個存儲庫,然後選擇並選擇要在哪臺計算機上使用的配置。

完美的工作,但如果你不是一個有經驗的git用戶可能有點令人生畏。

相關問題