バージョン管理したことない俺がBazaarを導入するまでの話

 日が随分長くなりましたね。
 また今回もコンピュータの話題です。
 わからない方は、
 ショッピングセンターに入ってる食べ物系の店で
 食ってみたいんだけど、なかなか購入に至らない食べ物
 について語り合いましょう。
 俺は「銀だこ」のたこ焼き!
 →こんにちは。
 香りといい見た目といい、ウマそうで食いたいのに、
 なんかスルーして「マックでいいかな・・」とかなるんですよね・・。


 非常に遅々として進んでないのですが、
 何本かアプリを開発中の俺です。
 色々とやってく中で、すこし面倒だなっていうか、
 たいしたことではないんですが、
 問題がありまして。
 今日はその解決策として
 Bazaarを導入したというお話です。

問題点

 
 解決したい問題は2つ。

  1. ファイルのバックアップがしたい
  2. 複数の環境で作業内容を同期したい

 今、Androidで動くアプリを作っているのですが、
 それがVM上にあるんですよ。
 仮想環境が壊れるか、PCが壊れるかしたら、
 復元が難しそうなのでそれを外に出したい。
 というのが1点。


 先日譲り受けたノートと母艦PCの間での、
 作業を同期したい。
 それがもう1点。


 Dropboxで同期する方法もあるんだけど、
 コーディング中にガリガリアップロードされていくのは
 精神衛生上よくない。
 間違えたソースまで同期されてしまうしね。
 その間のトラフィックを考えたらゾゾゾってなる。

といういうわけで

 Bazaar(bzr)というバージョン管理システムを入れてみました。
 あまりバージョン管理とかやったことないから、
 理解するまでに苦労しましたよー。
 Linuxとか全然わかんないし。


 Gitを入れなかった理由は特にない><;
 ゆくゆくはWindows機の中のファイルも管理したくて。
 なんかGitはLinuxじゃないとダメみたいなのを読んだから、
 じゃあ他のにしよう、みたいな。
 いい加減な理由ですよ。


 以下環境と導入までの手順。

0.各マシンの環境

環境1

 VMware
 Ubuntu 10.04

環境2

 ノート。
 Ubuntu 10.04

環境3

 デスクトップ
 Windows Vista
 コイツに共有リポジトリ(Shared Repository)を作る。

1.まずはUbuntuに必要なソフトを入れる

  • Samba
  • Bazaar

 
 sudo apt-getでさくっと入れる。
 ただし、Bazaarはそのままやると古いバージョンがあたっちゃうそうなので、
 このあたりを参考にしながら/etc/apt/sources.listに
 以下を末尾に追加します。

deb http://ppa.launchpad.net/bzr/ppa/ubuntu hardy main
deb-src http://ppa.launchpad.net/bzr/ppa/ubuntu hardy main

 そのあとsudo apt-get updateとかやると「キーがなくてアクセスできねーぞ」って怒られるので

 sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys XXXXXXXX

 とやって公開キーを登録。
 --recv-keysの後ろの公開キーはどっかに表示されてたはず。
 忘れちゃったよてへぺろ


 んでもう一回sudo apt-get updateやってエラーが出ないことを確認したら

 sudo apt-get bzr

 でBazaarのインストール完了。
 bzr --versionとか実行できるか確認。

2.Samba経由でWindowsの共有フォルダをマウントする

 sudo mount -t cifs //(winodows機のIPアドレスかマシン名)/(共有フォルダ名) (マウントに使うUbuntu側のディレクトリ) -o username=hoge,codepage=cp932,iocharset=utf8,defaults

 と、長ーいコマンドを打ってWindowsに接続。
 長いので、自動的につながるようにしちゃうか、
 shにまとめてしまったらいいんだと思う。

3.ローカルのディレクトリをBazaarに管理させる

 bzr init
 bzr add
 bzr commit

 でおk。

共有リポジトリを作る
 bzr init-repo

 でおk。
 Windowsにマウントしたディレクトリ(例えば/mnt/smb/)は
 rootじゃないと書き込めないから、
 sudo bzr init-repo
 ってやるんですよ。

共有リポジトリにローカルのファイルをアップロードする
 bzr push (共有リポジトリの場所)

 でおk。

 逆に引っ張り出すのは

 bzr pull (共有リポジトリの場所)

 一度実行すると場所を覚えてくれるので、
 二度目からはpush/pullだけで大丈夫。

Bazaarの仕組み

 ここが一番わかりやすい。
 コラム「共有リポジトリとブランチ」で解説されているように、
 Bazaarのリポジトリは管理対象のフォルダ/ファイルと同じ場所にある。
 これは共有リポジトリでも同じ。
 サーバーにファイルをおいて、そこをBazaarに管理させる。


 だから、新しいブランチを作るとなったら、
 適当にフォルダを作って、ファイルを置いて、
 Bazaarに管理させる(init-repo→add→commitする)だけ。
 ちなみに、管理不要となったら管理データの入ってる.bzrディレクトリを消すだけでいい。

ひとまず

 昨日一晩でここまで理解した!
 環境1のファイルを環境3にpushして、
 環境2でpullできたところまでで眠くなって
 ゲームオーバーです。


 もうちょいいじって色々理解したら、
 またなんか書きますね・・。

参考サイト

 Git本はたくさんあるのに、
 Bazaar本は全然見つからない・・。