僕は発展途上技術者

せっかちな人のための git 入門 - git をインストールし、共同で開発できる環境を整えるまで


subversion に代わる新しいソース管理システムということで git が注目されているようだ。


» Git - Fast Version Control System


subversion と大きく違うところは、分散されたレポジトリがローカルマシンに置かれている点。これは、ネットにつながっていなくてもソースをコミットできるということで、最近は電車のなかでもコードを書いたりする僕にはうってつけ。


マニュアルチュートリアルは充実しているのだが、僕はとりあえず最初にツールを触ってみて、ざっと全体像をつかみ、それから細部を調べたい質なので、もっとてっとり早く体験できるガイドを探したところ、あまり適切なものが見つからなかった。


そこで、レポジトリを作り、それをリモートにあるサーバーに置いたあと、subversion で言えば svn commit や svn update などにあたるコマンドを叩いて、2人以上の開発者でソースを共有するというシナリオで git を試してみた模様を自分でまとめてみた。


1. 構成


実際に試した構成は以下の通り。


git.png


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 さんのおこなった変更は、順に



  1. bill さんの開発環境

  2. bill さんのローカルレポジトリ(master)

  3. ubuntu 上のリモートレポジトリ(origin)

  4. steve さんのローカルレポジトリ(master)

  5. 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


プロフィール

株式会社まちクエスト代表、つくる社LLC代表。

Raspberry Piではじめる どきどきプログラミングを書きました。

Amazonから図書館検索 Libron、iPhoneアプリ ひらがなゲーム かなぶん を作っています。

Twitter @jishiha

最近のエントリー

アーカイブ