みのわーるど::Blog

茨城のシェアハウスの中にある会社で働くITベンチャー役員の奮闘記。

githubとhomesickでドットファイルをオシャレに管理する

最近母艦にmac miniを購入したり、扱うマシンが増えて来ました。ドットファイルに関しては前からgithubで管理していましたが、今はどんな感じの管理がモダンなのかな〜、と思って調査しました。

GitHub does dotfiles - dotfiles.github.io

とりあえず、homesickというgemを使ってみることに。

1. homesickのインストール

Rubyが導入されていれば、

gem install homesick --no-ri --no-rdoc

でインストールできます。

2. ドットファイルの準備

githubでリポジトリを作成します。ここでの注意点として、

We call a repository that is compatible with homesick to be a 'castle'. To act as a castle, a repository must be organized like so:

Contains a 'home' directory
'home' contains any number of files and directories that begin with '.'

とあります。ので、記事執筆時点でのリポジトリ構成は以下のようになっています。

f:id:yminowa:20130409121432j:plain

3. ドットファイルのセットアップ

作成したリポジトリを、以下のコマンドでcloneしてきます。

homesick clone git@github.com:yminowa/dotfiles

次に、cloneしたドットファイルたちに対し、以下のコマンドでリンクを張ります。

homesick symlink dotfiles

以上で終わりです。意外と簡単ですね!

実態は普通のリポジトリなので、ドットファイルたちに変更を加えてcommit、pushすることも当然出来ます。(主なコマンドは以下参照)

Tasks:
homesick clone URI # Clone +uri+ as a castle for homesick
homesick commit CASTLE # Commit the specified castle's changes
homesick generate PATH # generate a homesick-ready git repo at PATH
homesick help [TASK] # Describe available tasks or one specific task
homesick list # List cloned castles
homesick pull CASTLE # Update the specified castle
homesick push CASTLE # Push the specified castle
homesick symlink CASTLE # Symlinks all dotfiles from the specified castle
homesick track FILE CASTLE # add a file to a castle

Runtime options:
-f, [--force] # Overwrite files that already exist
-p, [--pretend] # Run but do not make any changes
-q, [--quiet] # Suppress status output
-s, [--skip] # Skip files that already exist

(追記)commit, pushの方法

上記のコマンドに従います。

/Users/yuichi% homesick list
    dotfiles  git@github.com:yminowa/dotfiles

dotfilesというCASTLEに対し、commit、pushを行いたいので、以下のような感じでOKです。

/Users/yuichi% homesick commit dotfiles
git commit all
[master 230dcc7] setup neocomplcache and neosnippet
 1 file changed, 114 insertions(+), 1 deletion(-)

/Users/yuichi% homesick push dotfiles
    git push
Counting objects: 7, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (4/4), 1.95 KiB, done.
Total 4 (delta 0), reused 0 (delta 0)
To git@github.com:yminowa/dotfiles
   a467a5c..230dcc7  master -> master