subversion に代わる新しいソース管理システムということで git が注目されているようだ。
» Git - Fast Version Control System
subversion と大きく違うところは、分散されたレポジトリがローカルマシンに置かれている点。これは、ネットにつながっていなくてもソースをコミットできるということで、最近は電車のなかでもコードを書いたりする僕にはうってつけ。
マニュアルやチュートリアルは充実しているのだが、僕はとりあえず最初にツールを触ってみて、ざっと全体像をつかみ、それから細部を調べたい質なので、もっとてっとり早く体験できるガイドを探したところ、あまり適切なものが見つからなかった。
そこで、レポジトリを作り、それをリモートにあるサーバーに置いたあと、subversion で言えば svn commit や svn update などにあたるコマンドを叩いて、2人以上の開発者でソースを共有するというシナリオで git を試してみた模様を自分でまとめてみた。
1. 構成
実際に試した構成は以下の通り。
Windows 環境の Bill さんと Mac の Steve さんでソースを共有する。おおもとのレポジトリは契約している VPS の Ubuntu サーバーに置く。
2. git をインストール
まず、それぞれの環境に git をインストールする。git のソースは Index of /pub/software/scm/git より最新のものを取得する。
[Ubuntu]
ubuntu% cd /tmp
ubuntu% wget http://www.kernel.org/pub/software/scm/git/git-1.6.0.tar.gz
ubuntu% tar zxvf git-1.6.0.tar.gz
ubuntu% cd git-1.6.0
ubuntu% ./configure
ubuntu% make
ubuntu% sudo make install
[Mac]
mac% cd /tmp
mac% wget http://www.kernel.org/pub/software/scm/git/git-1.6.0.tar.gz
mac% tar zxvf git-1.6.0.tar.gz
mac% cd git-1.6.0
mac% ./configure
mac% make prefix=/usr/local all
mac% sudo make prefix=/usr/local install
[Windows]
Windows 環境の場合は、cygwin でインストールするのがてっとり早い。
cygwin の setup.exe を起動し、ダウンロードサイトは http://mirrors.kernel.org を選択したら、Devel カテゴリの下に git が見つかった。
チェックボックスを選択してインストールするだけ。
3. レポジトリを作成し、最初のコミットをおこなう
最初に Mac の Steve さんが開発に着手、最初のコードを書いてレポジトリにコミットすることにする。
まずレポジトリ(ローカルの)を作成します。
mac% cd ~
mac% mkdir myapp
mac% cd myapp
mac% git init
次に適当に firstfile というファイルを作成し、レポジトリに追加、コミットします。
mac% touch firstfile
mac% git add firstfile
mac% git commit -m 'first commit'
4. サーバーにリモートレポジトリを作成
次に Ubuntu サーバーにログインし、リモートレポジトリを作成します。
ubuntu% mkdir /var/git/myapp.git
ubuntu% cd /var/git/myapp.git
ubuntu% git --bare init
[2008/08/29 追記]
git --bare init
の bare の前のハイフンは二つです。酒井さん指摘してくれてありがとうございます。
Mac に戻り、ローカルのリポジトリ(master)をリモートのリポジトリ(origin)にプッシュ、つまり反映させます。example.com はサーバーのドメイン名です。
mac% cd ~/myapp
mac% git remote add origin ssh://steve@example.com/var/git/myapp.git
mac% git push origin master (master を origin にプッシュするという意味)
5. Windows でチェックアウト
Windows の Bill さんがソースをチェックアウトします。
cygwin から
win% cd
win% git clone ssh://bill@example.com/var/git/myapp.git
すると、myapp というフォルダが作成され、その下に firstfile というファイルがあります。
steve さんと bill さんで共同開発できる準備が整いました。
6. コミットとアップデート作業の実際
では、ためしに bill さんがファイルを追加しコミットしたあと、steve さんのローカルの開発環境にその変更を反映させてみます。
Windows 上で新しいファイル secondfile を追加し、コミットします。
win% cd ~/myapp
win% touch secondfile
win% git add secondfile
win% git commit -m 'second commit'
ここでコミットしたのはローカルのレポジトリ(master)に対してであって、まだ変更はリモートのレポジトリ(origin)に対しては反映されていません。
つまりここまでは Windows の bill さんはネットにつながっていなくてもできるわけです。
次にローカルのレポジトリの変更をリモートのレポジトリに反映させます。
win% git push origin master
この部分が subversion でいえば svn commit にあたるわけです。
mac では steve さんがリモートレポジトリにあった変更をローカルの開発環境に反映させます。
mac% cd ~/myapp
mac% git pull origin master
これが subversion でいえば、svn update にあたります。
bill さんがおこなった変更が反映され、myapp 以下に secondfile という新しいファイルができているはずです。
つまり、bill さんのおこなった変更は、順に
- bill さんの開発環境
- bill さんのローカルレポジトリ(master)
- ubuntu 上のリモートレポジトリ(origin)
- steve さんのローカルレポジトリ(master)
- steve さんの開発環境
という経路をたどって steve さんの環境に反映されたことになります。
7. まとめ
git を使って分散レポジトリを体験してみると、開発環境の変更を(ローカルの)レポジトリに反映させる部分が高速でおこなえるのが気持ちいいことがわかりました。
subversion だと、常にリモートのレポジトリに対しておこなわれるため、コミットに数秒〜十数秒かかります。わずかな時間ではあるのですが、開発が中断され、リズムが損なわれてしまいます。git だとこの中断時間が一瞬なのでほとんど気にならないように思えます。(まだ本格的に git を使って開発を始めたわけではないのであくまでもそういう印象を持ったということですが。。)
あと、各フォルダの下に .svn フォルダが作られないというのもわずらわしくなくていいかも、です。
git をこれから積極的に使っていきたいという気になりました。
以下、参考にしたサイトです。
» Git - SVN Crash Course
» Compiling Git for Mac OS X Leopard (10.5)
» はじめてのgit | IDEA*IDEA
» Setting up a new remote git repository