2013-06-13 33 views
8

設定ファイル(~/.bashrc~/.emacs~/emacsなど)をgitに保存します。私がこれを設定したのは、単純にホームディレクトリにgitリポジトリを追加することでした。ローカル設定ファイルのgitリポジトリを効率的に管理する

私は、このアプローチは、いくつかの問題があるが見つかりました:それは再帰的に全体のホームディレクトリをスキャンするため

  • git guiは、永遠にかかります。
  • 私はときどき間違って新しいリポジトリに移動するファイルを追加します(私は新しいプロジェクトを作成します、~/projects/fooのように、まだgit repoが初期化されていないことを忘れて、fooディレクトリにgit add bar.xyzを実行します)。これにより、ファイルがconfig repoに追加されます)。

私は、私はまだこれで任意の根本的な問題が発生していないものの、すでにgitリポジトリを持つディレクトリの下にネストGitリポジトリを持つことが賢明であるかわかりません。

もっと良い方法がありますか、これは人々がローカル設定ファイルをgitに保存する標準的な方法ですか?

+1

マシン間でファイルを同期する場合は、Dropboxを使用します。 '〜/ Dropbox/home'のようなソースをいくつか持っていて、'〜/ Dropbox/home 'をソースとするスケルトン '〜/ .bashrc'を持っていれば、/.bashrc'を実行し、他のファイルを '〜'にシンボリックリンクします。 – millimoose

+0

これは多くのツールがあります。「汎用ドットファイルユーティリティ」のhttps://dotfiles.github.io/を参照してください。 –

答えて

3

git repoを使ってドットファイルを管理しています。それは含まれています:

  1. 私は追跡したい実際のドットファイル/ dotdirを含んでいます。私は(通常はレポにドットファイルを移動することで)dotfilesで何か新しいものを追加した後
  2. シェルスクリプトは、手動でrunnedさ

    for dotfile in dotfiles/.* ; do 
        case $(basename $dotfile) in 
        .) 
         ;; 
        ..) 
         ;; 
        *) 
         ln -sv $(realpath dotfile) $HOME/$(basename $dotfile) 
         ;; 
        esac 
    done 
    

スクリプトのように、$HOMEdotfiles/.*のシンボリックリンクを作成するにはまたは新しく清潔な$HOMEに入れてください。

レポはどこにでも置くことができます。私は使用している各ホストのクローンを$HOMEに持っています。

この方法では、ドットファイルを選択的に追跡するために、はるかに小さく、ネストされていない作業ツリーがあります。

p.s. にdotfiles/.config/*のようなエントリを追加したい場合は、追跡したくないファイルがたくさんあります。

+2

私はこのアイデアが好きです。シェルスクリプト内のコマンドのいくつかはデフォルトでは利用できません(例:OSXには実パスがありません)。 –

+0

質問:私はこれを行いますが、マシン固有のバリエーションをどのように扱いますか? gitconfigの電子メールを私の個人的な電子メールにしたいのですが、自分の仕事用コンピュータで仕事用の電子メールなどにして欲しいです。私は現在、ドットファイルから特定のファイルを '' '$ HOME'''にコピーすることでこれを処理します。メンテナンスの悪夢になります(新しいgitエイリアスを追加したい場合は、2つの.gitconfigファイルなどを更新する必要があります)。 –

+0

@AdamParkin Per-machineの設定も私のものです( '.asoundrc')。 git作者のところでは、zshの 'cd'フックを使ってパスからリポジトリごとの著者を設定します。[this gist](https://gist.github.com/jokester/208147bf83f155e1f39c6734a108feaa)を参照してください。試してみませんでしたが、グローバルなgitフックで同様のことができるかもしれません。 – Jokester

3

あなたのようにGitリポジトリに私のドットファイルを保存します。私のホームディレクトリはGitリポジトリです。

  • git gui:私はめったにそれを使用しないので、私はその性能は人跡未踏のファイルの多くの影響を受けているか本当にわかりません。しかし、私は~/.gitignoreファイルには単に*が含まれています。おそらくすべてを無視すると、git guiがあなたのためにスピードアップします。

  • が誤ってファイルを追加:(それはあなたの場合-fを使用するためにあなたを教えてあげるだけで、新しいプロジェクトのリポジトリを初期化するのを忘れたときに誤ってドットファイルリポジトリにファイルを追加する問題を解決するにも*が含まれている~/.gitignoreファイルの作成します本当にファイルを追加したい)。

  • 入れ子になったリポジトリに問題はありませんでした。

いくつかの注意:

  • 私は*に私の~/.gitignoreを設定する主な理由は、git statusは私のホームディレクトリ内のすべてのファイルを表示しないようにです。私はいつもgit add -fを使用しなければなりません。これはやや面倒ですが、それほど大きな問題ではありません。

  • git clean -dxfの代わりにgit clean -dxを使用してください。 git config clean.requireForce falseを新しいプロジェクトリポジトリで実行することを忘れないでください。しかし、あなたが入っていると思われるディレクトリにいない場合は、誤ってホームディレクトリのすべてのファイルを削除することがありません。

  • 時々、Gitはファイルのアクセス許可をリセットすることにします。機密ファイル(chmod og-rwx)をGitリポジトリに保存したい場合、これは悪いことがあります。私はpost-checkoutフックを使ってこれを処理し、特定のファイルやディレクトリのパーミッションを修正します(例えば、~/.ssh/authorized_keys)。

関連する問題