Edited at

homeshickとgit submoduleコマンドでプラグインも含めたドットファイルを全て管理する

More than 5 years have passed since last update.


概要

この記事はLinuxやOS Xで利用する環境設定ファイルをGitHubで管理する方法です。

さまざまなプラグインもgit submoduleコマンドで外部参照リポジトリとして管理します。

これを行なっておけば、オンライン環境下ならばどこでもいつでも同じような環境が手に入ります。

シンボリックリンク貼るの大変。。。という解決策として、homeshickを利用します。


はじめに

Githubにdotfilesリポジトリを作成、各種環境設定ファイルを登録している方も多いと思います。

「でもプラグインとか他人のリポジトリのファイルを自分のリポジトリにコピペするのは気持ち悪いし、ライセンス的にも怖い」って思っている方、正しいです。

そしてGitはそれを解決できます。ドットファイル管理を行なっていて、プラグイン管理について知りたいだけの方は、次のQiita記事を見ていただければ十分です。

dotfiles (設定ファイル)の管理に git submodule を使う

http://qiita.com/sonots/items/adae6cda0bb7a05f8905


ドットファイル?

UNIXやMacなどのOS環境では$HOME以下にドットから始まるファイルを置くことでユーザー独自の環境設定が出来ます。

黒い画面のくせにカラフルな人、Vimなのに関数ジャンプしている人は他人に見えない隠しファイルでズルしているのですね()


homeshick?

homeshickはシェルスクリプトベースで動く自動でリポジトリ内の設定ファイルのシンボリックリンクを$HOMEに貼ってくれるスクリプトです。

homesickというほぼ同機能のスクリプトも存在するのですがRubyベースなので、私は準備が少なくてよいhomeshick使っています。


homeshickの準備

homeshick自体は4コマンドほどで準備出来ます。

$git clone git://github.com/andsens/homeshick.git ~/.homesick/repos/homeshick

$printf '\nsource "$HOME/.homesick/repos/homeshick/homeshick.sh"' >> $HOME/.bashrc
$printf '\nsource "$HOME/.homesick/repos/homeshick/completions/homeshick-completion.bash"' >> $HOME/.bashrc
$source ~/.bashrc

ディレクトリ名が.homesickなのは、homesickとhomeshickがクローン関係であり、homesickの方が先輩ということですね。

zshなど利用している方は、当然.bashrc.zshrcなどに置き換えてください。


dotfilesリポジトリを作る!

めんどくさいことはしたくないので、リポジトリはWeb GUIで作っておきます。(๑╹ڡ╹๑)

ここで大事なことは dotfilesというリポジトリ名で作ること。

制約ができるわけではありませんが、別の名前にするとたぶんあとで後悔します。。。

作ったdotfilesリポジトリをcloneしてきます。

homeshickコマンドを使えばすぐに移動できます。

また、homeshickは$REPO_HOME/home以下のファイルのシンボリックリンクを作成するため、ディレクトリを作成しておきます。

$git clone https://github.com/budougumi0617/dotfiles.git ~/.homesick/repos/dotfiles

$homechick cd dotfiles
$mkdir home


dotfilesリポジトリ内にドットファイルを入れる

今まで設定した環境設定ファイルを$REPO_HOME/homeに移動しておきます。

$cp ~/.vimrc ~/.homesick/repos/dotfiles/home/

$cp ~/.zshrc ~/.homesick/repos/dotfiles/home/


dotfilesリポジトリ内にプラグインのリポジトリを登録する

git submoduleコマンドで自分のリポジトリから他のリポジトリに存在するプラグインに対してリンクを貼っていきます。

$git submodule add https://github.com/Shougo/unite.vim.git ~/.homesick/repos/dotfiles/home/.vim/bundle/unite.vim

$git submodule add https://github.com/Shougo/neobundle.vim ~/.homesick/repos/dotfiles/home/.vim/bundle/neobundle.vim
git submodule add https://github.com/robbyrussell/oh-my-zsh.git ~/.homesick/repos/dotfiles/home/.oh-my-zh


dotfilesリポジトリ内にプラグインのリポジトリを取り込む

上記だけだと実体が無いので、以下のようにして外部リポジトリからファイルを取得します。

$homeshick cd dotfiles

$git submodule init
$git submodule update


homeshickでシンボリックリンクを貼る!

これで準備が出来ました。homecshick symlink dotfilesコマンドでシンボリックリンクが$HOME以下に作成されていきます。既に環境設定ファイルを作成していた場合は上書きで。


他のOS環境で作成したdotfilesリポジトリを用いる

一度作ればあとは簡単です!と言いつつけっこーコマンド多いですね。

当然、vim上で:NeoBundleInstallコマンドを行ったり、zshなどへのシェルの変換も別途行う必要があります。

しかしめんどくさいのは最初だけ!

$git clone git://github.com/andsens/homeshick.git ~/.homesick/repos/

$printf '\nsource "$HOME/.homesick/repos/homeshick/homeshick.sh"' >> $HOME/.bashrc
$printf '\nsource "$HOME/.homesick/repos/homeshick/completions/homeshick-completion.bash"' >> $HOME/.bashrc
$source ~/.bashrc
$git clone https://github.com/budougumi0617/dotfiles.git ~/.homesick/repos/
$homeshick cd dotfiles
$git submodule init
$git submodule update
$homeshick symlink dotfiles


まとめ

最近は簡単に仮想環境を作れたり複数環境で作業することが多いので、「VM上でちょっと追記した.vimrcをメイン環境でも使いたい!」と思うときなどかなりはかどります。


  • 環境設定ファイルをGithubで共有すると共有が出来て便利

  • homeshickを使えば簡単にリポジトリ内の環境設定ファイルのシンボリックリンクを$HOMEに貼れる


  • git submoduleコマンドで配布されているプラグインの管理も可能

ただしこれだけは注意してください。


  • 社内プロキシ設定情報などを環境設定に書いているファイルは注意!

とくにGitHubはファイル自体を削除してもログで確認できますので、リポジトリに歴史を変える必要ができますよ。

.gitconfigなどが該当します。ただ以下のような抜け道もあります。

dotfilsをGitHub管理したいけど.gitconfigは社内proxy情報が…ってときは!

http://qiita.com/budougumi0617/items/bc04364464488802f54e


参考文献

今回は以下の内容を参考にさせていただきました!

Homeshickでdotfilesを管理することにした

http://befool.co.jp/blog/jiska/homeshick-git-dotfile-synchronizer/

dotfiles (設定ファイル)の管理に git submodule を使う

http://qiita.com/sonots/items/adae6cda0bb7a05f8905

homeshickコマンドの詳細は以下で。

https://github.com/andsens/homeshick/wiki/Commands