Gitを使って設定ファイルを管理する on OS X(入門編)

dotで始まるUNIX設定ファイルというのは、追記、削除も多いし、他のマシンで使い回したりすることも多いのでバージョン管理システムで管理してしまいたいもの。そこで今回はgitを使って管理してみる。

git インストール

まずはgitをインストールする必要がある。gitはmacportsからインストールすると管理がらくだと思う。以下macportsは入っていることが前提。

sudo port selfupdate
sudo port install git-core tig

git-coreがgitのメインパッケージ。tigはgitのログを見やすくするツール。どっちもはてなインターンで知ったものの一つ。

github を設定しよう

さて、macportsコンパイルが前提だから、めっさ時間がかかって暇してしまう。とくに初回のインストールだったりすると、依存関係にあるperlとかopensslとか山のようにコンパイルするので結構待たされる。

なので、gitのリポジトリを保管する先としてgithubのアカウントを作ってしまおう。gitは分散リポジトリを採用しているのでサーバーなどを用意しなくてもローカルのファイルだけでパッケージ管理ができる。でも、バックアップとか他のマシンでの利用を考えるとどこかにリポジトリをおいておきたい。そこで、無料でgitのリポジトリを預かってくれるgithubを利用する。

http://github.com/

にアクセスして、sigun up nowをクリック。必要事項を埋める。ssh public keyが必要なので、

http://github.com/guides/providing-your-ssh-key

を参考にしながら作る。指示に従うとpublickeyのcopyまでしちゃうんだなあ。pbcopyとかいうコマンドがあるとは知らなかった。でコピーされたkeyを貼付けて登録を済ます。

登録に成功すると、ログインすることができるようになる。
ログインしたら、右の方にあるcreate new one というのをクリックして新しいリポジトリを作ろう。注意しなければいけないのは、無料アカウントだとリポジトリをpublicにしか設定できないので管理する設定ファイルは注意して扱う必要がある。まちがっても .ssh以下をアップしたりしないように。

新しいリポジトリの作成に成功すると、次にやるべきコマンドが表示されるのでほぼそれに従っていくだけ。

まずは

$ git config --global user.name "Ryutaro Kurai"
$ git config --global user.email ryu.kurai@hoge.fuga.com

として、gitで使われる名前、メールアドレスを設定

$ cd config_files_dir #設定ファイルを集めているディレクトリ
$ git init
$ touch README
$ git add README
$ git commit -m 'first commit'
$ git remote add origin git@github.com:kurain/kurain-dotfiles.git
$ git push origin master

これで、一通り準備が完了。

で、どうやって、dotで始まる設定ファイルを、一つのディレクトリに集めるかという問題になる。管理したいファイルとしたくないファイルの選別とか、ディレクトリに集めたファイルをホーム以下に戻す処理とか結構いろいろ必要なので以下のようなRakefileを書いたので使ってくれると幸い(自己責任の上でご利用ください)。
RakeはRubyで書かれたMakeのようなもので繰り返しのある作業をシェルスクリプトなどよりは簡単にかける仕組み。実行にはrakeコマンドが必要だけど、最近のOS Xなら入ってるしwindowsでもOne Click installer つかってrubyを入れてれば使えるはず。一応windowsでも使えるように気は使ってみたが試してはいない。

使い方は、

  • 設定ファイルを集めたいディレクトリに、Rakefileという名前で保存
  • $ rake import で設定ファイルを収集
  • $ rake export で設定ファイルをコピーしてHOME以下に反映
  • $ rake symlink で設定ファイルをシンボリックリンクとしてHOME以下に反映
  • $ rake force_symlink
  • $ rake force_export forceがついてる方はHOME以下に対して上書きして反映

なので、さっきgitの為に作った config_file_dir に集めるとしたら、

 $ sudo port install wget #wgetはmacportsから入れないと無い
 $ wget http://gist.github.com/raw/17444/9ecd4c3b2e58f05de8a3019099b08cbc3f05018b -O Rakefile
 $ rake import #ファイルが集まる
 $ git add . #設定ファイルをgitの管理対象に加える
 $ git commit -m 'first dotfiles commit' #管理対象のファイルをリポジトリに追加
 $ gti push #githubに反映

としてあげると、githubで設定ファイルを管理できる。

追加、変更したファイルをgitで管理する方法とか、新しい環境で設定ファイルをダウンロードして、HOME以下に反映させる方法とか説明しないと行けないのだけれどそろそろ体力が限界なのでまた明日以降に。