2009-09-11 13 views
35

私は通常複数のコンピュータで作業します。私はさまざまな設定ファイルを持っています。例えば、.bashrc.gitconfig.irbrc.vimrc、設定フォルダ、例えば.vim/に貴重なカスタマイズが含まれています。 時には、私は、異なるコンピュータ間で構成の小さな変化をしたい。複数のコンピュータにまたがるユーザー設定ファイルの管理

バージョンコントロールを使用してこれらの異なるファイルを管理したいと考えています。

  • 他の人はバージョンコントロールを使用して設定ファイルを管理しますか?
  • これを簡単にするヒントは何ですか?
  • コンピュータ間のバリエーションを扱う最もエレガントな方法は何ですか?
  • 私は快適ですgit;他の提案はありますか?
+6

で書かれました、はい、人々は最も確かに設定ファイルのリビジョンコントロールを使用します。私は特にウィンドウマネージャーの設定ファイルのためにそれを見るが、GitHubで "config"を検索して何を得るかを見てみるだけだ。 –

答えて

14

現時点では、クローンgit repoを使用しています。物事を単純にするために、異なるマシン間で異なる必要があるファイルは.bashrcです。別のマシンで異なる応答をするこのファイルのバージョンが1つしかない場合は、うれしいことです。このように、私の.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.localファイルを共通の.bashrcファイルを使用して作成することができます。 .bashrc.localは、そのマシンに固有のカスタマイズ(色など)を持ちます。 – vaichidrewar

1

カスタムメイドコンピュータ用のブランチでは、ログイン時の自動同期が良い解決策のようです。

私はバージョン管理の設定にetckeeperを使用しましたが、実際にはユーザー設定に拡張されていません。

2

gitを使用する場合は、 "origin"レポをマスターに定義することができます。作業している各コンピュータでクローンを作成します。すべてのコンピュータにブランチを使って設定ファイルのセットを持たせることができます。

3

CfEngineを使用すると、マシン間で設定ファイルを管理したり、さらに多くのことを行うことができます。 学習曲線はちょっと高いかもしれませんが、Linuxを定期的に実行しているコンピュータのプールを管理/更新/維持する必要がある場合は、その価値があります。

+0

+1これもhttp://en.wikipedia.org/wiki/Cfengine –

+0

または人形、シェフ、bcfg2、[その他](http://en.wikipedia.org/wiki/Comparison_of_open_source_configuration_management_software)。 – Bash

1

この種の質問は時々起こります。この共通の使用例を処理するツールは見たことがないので、gitとシンボリックリンクを使用してこれらのファイルを管理するスクリプトを作成しました。

はそれが完璧ではないhttp://github.com/bstpierre/dotfiles

を参照してください。現在、ディレクトリの操作に関連するバグがあります。また、コンピュータ間のバリエーションにはまだ対応していません。

このようなツールを使用する前に、適切なバックアップがあることを確認してください。

+1

落札時のコメントでご説明ください – user89021

17

私はbzrリポジトリである~/config/にフォルダを保持します。私はそれを同期させるために様々なコンピュータ間でリポジトリをプッシュ/プルします。あなたはgitの代わりには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 

:私は私のホームディレクトリにシンボリックリンクを作るために使用するスクリプトをインストールする必要があり

FILES=`git ls-tree --name-only HEAD` 

(私はask SOに持っていました)それを把握するために

編集:私は実際にはもうこれをしない、今私は素敵な熊手で他の誰かが書いたスクリプトをインストールし、githubの上dotfilesレポを持っています。

+0

+1かなり近似しています –

+0

ありがとうございます。ドットファイルレポは非常に役立ちます! – Shuo

+0

rakeインストールスクリプトと古いbashスクリプトの利点は何ですか?そして、bzrリポジトリとgitubのドットファイルレポとの違いはありますか? gitとbzrをちょうど使用していて、別のインストールスクリプトを使用していることを除いて、同じ解決法のように思えますか? –

2
+1

+1。私もDropboxを使用しています。また、複数のオペレーティングシステムにまたがって移動するので、Dropboxのほとんどの設定ファイルには、作成されたOSを示す拡張子が付いています。両方の環境が同じ場合、拡張子に関係なく同じファイルにリンクできます。たとえば、〜/ Dropbox/config/bash/profile.osxを指す.profileシンボリックリンクがあります。私のLinuxのボックスでは、〜/ Dropbox/config/bash/profile.linを指しています。 –

2

私は同様の状況でslackを使用します。スラックは、ロール/サブロールの定義を可能にするので、クローンされたファイルまたはパッチのいずれかを使用して小さなバリエーションでファイルを管理できます。スラックディレクトリは私のデプロイメントでgitによって管理されます。

+0

私はたるみをたくさん使っています。それは軽量で速く、道に迷いません。非常に信頼性の高い作品です。 – user89021

1

は私が

は、家庭内のディレクトリが .host_configs/と呼ば作る...あなたは私が何をしてきたと同様にすることができる何をしたいと思います。これはバージョン管理されています。または、私の場合は中央のコンピュータ上の特別なフォルダにあります。私はそれを新しいマシンでスクロールします。その中には、異なる設定が必要なすべてのホスト用のフォルダがあります。各ホストのフォルダには、そのマシンの短いホスト名の後に名前を付ける必要があります。だからあなたのGitのレポであなたが持っている:

各ホストの特定のフォルダに
.host_configs/ 
      homecomp1/ 
      girlfriendcomp1/ 
      workcomp1/ 
      workcomp2/ 

は、その特定のボックスのために、設定ファイルをなどの.vimrc、.irbrcを置きます。 さらに、各ホストフォルダに.[SHORT_HOST]_rcというファイルを作成します。たとえば、あなたのマシンが "sane"という名前であれば、.sane_rcという名前のファイルがあります。このファイルには、通常そのホストに固有の.bashrcにある行が含まれます。たとえば、Macの場合、色がついているlsのほとんどのnixマシンでalias ls='ls --color=auto'の代わりにalias ls='ls -GF'が必要な場合は、そのマシンの.[SHORT_HOST]_rcにその行を置き、通常どおりの特殊な関数や宣言などがあれば.bashrcまたは.profileなど(または場合によっては.zshrc、.tschrc)。

.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/フォルダは次のようになります。問題のディストリビューションに付属している基本的なものをとり、すべてのホスト固有の設定を.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にコミットできます。

これはシェルではおそらく必要なものですが、他の機能が必要な場合は、同じ原則(外部の.rcファイルを.bashrcに組み込み、すべての設定をシンボリックリンク構造化されたバージョン管理フォルダへのファイル)を、シェルよりも多用途/醜いものにします。

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

...とホームのほかに、いくつかのディレクトリに特定の設定ファイルを配置するように、より複雑なのconf管理を行うには、あなたのimport_conf.rbを書き込み、または:だからではなく、あなたの.bashrcで上記の、があるかもしれません.ssh /、.subversion /などの設定フォルダを扱っています。これは私がやっていることです。それはかなりエレガントですが、もっと良い解決法があるかもしれません。あなたがサードパーティーに頼っているにもかかわらず、いくつかの創造的なシンボリックリンクを備えたDropboxは優れたアイデアであり、あなたはグラフィカルな環境にいなければなりません。また、Linuxでシンボリックリンク+ DropboxでできることとWindowsで再生したいものを実装した場合にはショートカット + dropboxとの間に矛盾があることにも注意してください。

0

は今vcsh

はREADMEからもあります:

VCSH - [...]偽の裸のgitリポジトリ

経由

を$ HOMEのconfigファイルを管理します

vcshを使うと、いくつものgitリポジトリを持つことができます。互いをぶつけ合う。これは、設定セット(zsh、vim、sshなど)ごとに1つのリポジトリを持ち、どのマシンでどの設定を使用するかを選択して選択できることを意味します。

完全に機能しますが、経験豊富なgitユーザーでない場合は気にする必要はありません。ここで

2

は、いくつかのドットファイルマネージャーです:

  • homesick:ルビー
  • homeshickに基づいて:最初のものと同じですが、ルビー依存
  • dfmなし:gollyではPerlの
関連する問題