一人で使うGit

まずは使ってみよう!初めてのGit」と「Gitを使ったインストール」において、Gitを紹介した。どちらの場合も、バージョン管理システムとして使うというよりは、「ファイルの共有と転送」のツールとして気楽に使おう、ということだった。

「ファイルの共有と転送」というと、複数の人々が関与する印象が強いが、たった一人でも便利に使えることがある。例えば、複数のコンピュータ上で自分の設定ファイルを同期させたいときだ。

Using Git Alone

あっちこっちで設定するのは面倒だ

私は、Windows上でMinGWとMSYSを使っている。Cygwinを利用している人も多いだろう。また、いくつかのLinuxサーバーマシンにシェルログインする機会もある。Vagrantを使い始めてからは、デスクトップマシン内にも仮想サーバーマシンが幾つも立ち上がる状況になっている。これらの仮想サーバーマシンにも vagran ssh でログイン/ログアウトを繰り返す。

どのマシンでも同じようなシェル(bash)の環境を使いたい。具体的には、シェルの環境設定のために~/.bashrcファイルを書いたり修正したりすることになるのだが、毎回そんなことをするのは面倒な話だ。自分用の.bashrcファイル(やその他の設定ファイル)をコピーすればいいとは言いながら、とあるマシン上の修正を他のマシンにも反映させることを手作業でやっていてはたまらない。

ここは分散バージョン管理システムの出番だ。設定ファイルも、時間にともない修正を繰り返すソースファイルだ。バージョン管理をすべきだろう。さらには、分散バージョン管理システムなら複数のマシン上の設定ファイルを同期するのも簡単だ。

ネットワーク上に設定ファイルのリポジトリを

まずは、どのマシンからもアクセス可能な場所に設定ファイルの保管庫を確保する。そう、いつものようにGitHubが使える。もし、個人情報や仕事に関係するデータがあるなら、bitbucketの非公開リポジトリか、独自に運用するGitリポジトリサーバーとなるだろう。

仮に、https://bitbucket.org/<ユーザー名>/dotfiles.git がリポジトリのURLだとしよう。このリポジトリには、ホームディレクトリに置かれるドットで始まる設定ファイルが保存されている。

始めてのマシンに最初にログインしたとき、まずやることは設定ファイル(ドットファイル)群のクローンだ。

hiyama@NewMachine ~
$ git clone https://m_hiyama@bitbucket.org/m_hiyama/dotfiles.git
Cloning into 'dotfiles'...
Password for 'https://m_hiyama@bitbucket.org':
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (6/6), done.
remote: Total 6 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (6/6), done.
Checking connectivity... done

hiyama@NewMachine ~
$

これで、設定ファイルが手元にコピーされた。

.bashrcならこんな感じ

私が使っている.bashrcは次のようなものだ。

if [ -f /etc/bashrc ]; then
    . /etc/bashrc
fi

DOTFILES=~/dotfiles
if [ -f $DOTFILES/.bashrc.common ]; then
    echo loading  $DOTFILES/.bashrc.common
    source $DOTFILES/.bashrc.common
fi

THIS_HOST=`hostname`

echo "This Host = $THIS_HOST"
if [ -f $DOTFILES/.bashrc.$THIS_HOST ]; then
    echo loading  $DOTFILES/.bashrc.$THIS_HOST
    source $DOTFILES/.bashrc.$THIS_HOST
else
    echo "NOT exist: $DOTFILES/.bashrc.$THIS_HOST"
fi

$DOTFILES/.bashrc.common にどのコンピュータでも使う設定が書いてあり、ホスト(コンピュータ)ごとに違う部分は $DOTFILES/.bashrc.$THIS_HOST に書いてある。ここで、変数$THIS_HOSTの値は当該のコンピュータのホスト名である。

このような設定ファイルを配置するのに、幾分かの作業が必要となる。私はその作業のためにMakefileを書いているが、.bashrcの配置だけなら、シェルスクリプトでよいだろう。

#/bin/sh
# setup.sh

DOTFILES=~/dotfiles

if [ -f $DOTFILES/.bashrc ]; then
    rm -f ~/.bashrc
    uname | grep MINGW > /dev/null
    if [ $? = 0 ]; then
        cp $DOTFILES/.bashrc ~
    else
        ln -s $DOTFILES/.bashrc ~
    fi
fi

次のようにして ~/dotfiles/setup.sh を実行すれば、いつものシェル環境が手に入る。

hiyama@NewMachine ~
$ sh dotfiles/setup.sh

hiyama@NewMachine ~
$ 

ホスト固有の設定は、~/dotfiles/.bashrc.NewMachine に書き足す。固有の設定だからそのマシンだけに置いてもよさそうだが、バックアップや参照のために、git add、git commit、git push しておくほうがよい。

ネットワークワイドでファイルを扱うなら

分散バージョン管理システムは、プログラム・ソースコードを管理する目的で作られたソフトウェアだが、基本的な機能は汎用的で自由度が高い。GitHub/bitbucketなどのサービスの拡充にも後押しされて、今やネットワークワイドでのファイルの共有、転送、保存、管理のインフラとなっている。ネットワークワイドでファイルを扱うなら、利用できることが多いはずだ。