Bazaarでござ〜る。猿でもできる分散バージョン管理“超”入門ユカイ、ツーカイ、カイハツ環境!(20)(3/4 ページ)

» 2011年02月16日 00時00分 公開
[岡本隆史,@IT]

TortoiseBzrでファイルを追加してコミットするには

 trunkへファイルを追加するには、作成されたtrunkの下にファイルを作成、もしくはコピーし、右クリックメニューから[TortoiseBzr]→[追加]を選択し、Bazaarコミットを選択します。TortoizeBzrをインストールしておけば、図7のようにWindowsのフォルダメニューからファイルの追加、コミットなどの操作ができます。

図7 TortoiseBzrの使用例 図7 TortoiseBzrの使用例

 他のバージョン管理システムと同じで、ファイルを追加してもコミットしないとリポジトリへは反映されません。コミットを忘れないようにしましょう。

 Javaの.classファイルやbinディレクトリなどコンパイル時に生成されたファイルなどでバージョン管理から外したい場合は、ブランチのルートディレクトリ(ここではtrunk)に.bzrignoreファイルを作成します。.bzrignoreファイルには、例えば次のように記述します。

[.bzrignore]
*.class
*.o
*.pyo
target
bin

WebサーバでBazaarのリポジトリを公開するには

 Bazaarのリポジトリを共有するには、Bazaarのリポジトリを、BazaarをインストールしたLinuxマシン上にコピーして、各ユーザーからアクセスできるようにパーミッションとグループ設定を行えば、完了です。Explorerやクライアントから「sftp://【ホスト名】/var/www/bzr-repository」のように、Bazaarのリポジトリを指定してやれば、リポジトリへアクセスできます。

 この方法はリポジトリを簡単に共有できますが、ファイアウォールなどでアクセスが制限されている環境では利用できないことがあります。スマートサーバを利用すると、mod_python、fastcgi、wsgiなどを利用してWebサーバ上でリポジトリを公開できます。

 ここでは、スマートサーバを利用した公開方法をご紹介します。

スマートサーバの設定

 最初に、必要なソフトウェアApacheとWSGI、そしてBazaarをインストールします。Ubuntuの場合、次のようにします。

# aptitude install bzr libapache2-mod-wsgi apache2

 インストールが完了したら、「/usr/local/wsgi/scripts/bzr.wsgi」という名前でwsgiファイルを作成します。

from bzrlib.transport.http import wsgi
 
def application(environ, start_response):
    app = wsgi.make_app(
        root="/var/lib/bzr",
        prefix="/bzr",
        readonly=False,
        load_plugins=True,
        enable_logging=False)
    return app(environ, start_response)
bzr.wsgi

 bzr.wsgiのrootには、Bazaarのリポジトリを置くルートディレクトリを、prefixにはWebでアクセスするときのURLのプレフィクス(上記の例では。「http://【ホスト名】/bzr/xxx」でリポジトリにアクセス)を指定します。

Apacheの設定

 下記の設定をApacheの設定に追加します(Ubuntuの場合、/etc/apache2/site-availables/defaultです)。

WSGIScriptAliasMatch ^/bzr /usr/local/wsgi/scripts/bzr.wsgi
<Location /bzr>
  WSGIApplicationGroup %{GLOBAL}
  AuthType Basic
  AuthName "Bazaar Authenticate"
  AuthUserFile /etc/htpasswd
  Require valid-user
</Location>

 /etc/htpasswdファイルにhtpasswdコマンドでユーザーを追加します。

# htpasswd -c /etc/htpasswd okamototk (1人目のユーザー作成)
# htpasswd /etc/htpasswd okamototk    (2人目以降)

 モジュールをロードし、Apacheを再起動します。

# a2enmod  auth_basic wsgi
# /etc/init.d/apache2 restart

 なおスマートサーバを利用した場合、リポジトリへのアクセス制御をApacheで行えます。trunkへの書き込み・マージは管理者しかできなくしたり、秘密性が高いブランチを担当者しかアクセスできなくしたりできます。

リポジトリの準備

 先ほどWindows上で生成した共有リポジトリ(trunkの一段上のディレクトリ)を/var/lib/bzrディレクトリにコピーします。新規に作成する場合は、/var/lib/bzrディレクトリで次のようにします。

# bzr init-repo test
# cd test
# bzr init trunk

 アクセス権をApache(www-date)でアクセス可能にしておきます。

# chmod www-data.www-data -R /var/lib/bzr

 これで、サーバ上でのリポジトリの公開は完了です。

Bazaar Explorerでサーバからブランチを取得するには

 Windows上でサーバ上の中央リポジトリ上のtrunkのコードを取得してみましょう。

 Bazaar Explorerを起動し、[プロジェクトのソースを取得する]→[ブランチ]を選択します。[From]に先ほど設定したリポジトリのtrunkを指定、[宛先]に取得したソースコードを格納する場所を選択します(図8)。新しい共有リポジトリを作成するかどうかの質問には[はい]と答え共有リポジトリを取得します。

図8 共有リポジトリのブランチの取得 図8 共有リポジトリのブランチの取得

 これで、trunkで管理されているファイルが取得できます。

プッシュ! プル! マージ! コミット!

 編集したファイルの中央リポジトリへの反映と中央リポジトリ上のファイルの変更を取得する操作は、「Push(プッシュ)」「Pull(プル)」と呼びます。

 また、ローカルリポジトリに変更がある場合は、Pullの代わりに「Merge(マージ)」を用います。次の図9をご覧ください。

図9 push、pull、commit、mergeの関係(分散リポジトリ方式での利用) 図9 push、pull、commit、mergeの関係(分散リポジトリ方式での利用)

 SubversionやCVSで利用される「Commit(コミット)」は、Bazaarのような分散バージョン管理システムでは、基本的にはローカルリポジトリへの反映となります。中央リポジトリへ反映させるには、プッシュを行う必要があります。

 中央リポジトリの更新を取り込むにはプルを行います。プルを行うと、ローカルリポジトリと作業コピーを更新してくれます。ただし、ローカルのリポジトリに変更がある場合は、プルできません。その場合は、代わりにマージを利用します。

 これが理解できれば、Bazzar ExplorerやTortoiseBzrを見れば、操作は一目瞭然です。例えば、Windowsのシェルから右クリックでメニューを開くと、次のようなメニューが表示されます。

図10 TortoizeBzrのメニュー 図10 TortoizeBzrのメニュー

 次ページでは、Bazaarの使い方として最後に、ブランチの作成とマージの方法を紹介し、Bazaarの課題について説明します。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。