忍者ブログ
MASTER →  ADMIN / NEW ENTRY / COMMENT
現代魔法(nearly equal 情報技術)を勉強中な人のメモ(チラシの裏)
/ 2024/11/21 (Thu) / 編集
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

/ 2010/01/11 (Mon) / 編集
分散型バージョン管理システム、Bazzarのメモ

分散型の特徴は「メインのリポジトリが必要ない」ということ。そしてbazaarのポイントは「マルチバイト文字が使える」(つまり日本語のファイル名もおけ)ということと「プラグイン形式で機能追加できる」ということ。だと個人的には思う。
参考サイト:
Bazaar公式
Bazaar wiki

インストールと初期設定をする

インストールは公式サイトからインストーラをゲットして、ダブルクリックすればおけ。

初期設定としてユーザ名とメルアドを登録
%bzr whoami "ユーザ名 <メールアドレス>"
これをするとホームディレクトリにbazaar設定ファイル用のディレクトリができる。
%ls ~/.bazaar/
bazaar.conf
ここに「ignore」というファイルを作ると、ignoreに記述されたファイル名のファイルはaddやcommitされなくなるので便利。
*.a
*.o
*.py[co]
*.so
*.sw[nop]
*~
.#*
[#]*#
.DS_Store

ローカルで使う

まずはプロジェクトを作成します。登録したいファイルがあるディレクトリ(test)に移動して初期化(前準備)します。
今回はテスト用にtest.txtというファイルを追加してみませう。
%cd test
%touch test.txt
%bzr init
これでbzrの準備完了。

つぎにファイルをbzrの管理下におきます。
bzr add test.txt

そして登録(commit)、楽勝ですねw
bzr commit -m '変更に関するコメント'


サーバ上で集中管理

まずはプロジェクト(ブランチ?)をおいとくためのディレクトリを好きなところに作成する。
%mkdir bzr_repo
つぎに、サーバ上に共有用のプロジェクトを作成する。
%cd bzr_repo
%mkdir test
そして初期化しておく。
このとき、集中管理用のときは「--no-trees」オプションを付ける。これは「作業コピー(ファイルそのもの)は置かずに更新履歴のみを保存する」ためにつけるものだが、今回はバックアップ目的で作業コピーも取っておきたいのでなし。
%cd test
%bzr init
でわでわ、サーバを起動します。
%bzr serve -v --allow-write --directory=bzr_repoまでの絶対パス
listening on port: 4155

ここからはローカルでの作業。 まずはサーバからリポジトリをダウンロード
bzr co bzr://サーバのURL/test
これでローカルにtestディレクトリが出来ます。

このテストディレクトリにファイルを作成、管理下に追加し、登録します。
%cd test
%touch test
%bzr add
%%bzr commit -m 'test commit from local'
これで、”ネットワークに繋がっていれば”ローカルもリモートも変更されます。ただし、ネットワークに繋がっていないとcommitできません。


自動起動は必要だろjk

bazaarのスマートサーバを自動起動する、今回はxinetdを使います。
「/etc/xinetd.d」に「bzr」というファイル名で以下を作成。
service bzr
{
         disable         = no
         server          = /usr/bin/bzr
         server_args     = serve  --inet --allow-write --directory=bzrレポジトリの絶対パス
         log_on_success  += DURATION HOST
         log_on_failure  += HOST
         nice            = 10
         socket_type     = stream
         protocol        = tcp
         wait            = no
         user            = bzr用のユーザ
         port            = 4155
}
あとは
%service xinetd restart
ちなみに、xinetdの設定の詳細は[Linuxべんりな動作情報 ナレッジベース:ネットワーク]xinetdの設定方法をご参照。


オフラインでやりたいな〜

サーバからcheckoutしたプロジェクトは勝手にサーバと同期されます。逆にいえば、サーバと通信できない状況ではcommitできないということ!それはこまることもあるよね。

というわけでこのオプション、「unbind」を使えばローカルのみで変更が記録できます。
%bzr unbind
そして、サーバと通信できる状況になったときに「bind」で同期を再開。
%bzr bind
じゃあなんか適当に作業する。
%touch test2.txt
%bzr add
次に、サーバのプロジェクトとズレがないことを確認するためにはupdateします。
%bzr update
今回は一人でやってるので問題ありませんが、もし他の人も更新してたりするとmargeとかの作業も必要になります。

というわけで、あとはいつもどうりcommitします。
%bzr commit -m 'local commit 2'

でわでわ、サーバ側で確認してみます。
%cd bzr_repo/test
%bzr log
なんか増えてる。じゃあファイルは?というと、、、あれ?lsしてもファイル(test.txt,test2.txt)がない、、、だと、、、

どうやら記録されるていてもファイルは存在出来てないようです。じゃあupdateして最新の状態を取得してみませう。
%bzr update
+N  test.txt                                                                                      
+N  test2.txt
All changes applied successfully.                                                                 
Updated to revision 2.
%ls
test.txt  test2.txt
できた!


拍手[0回]

PR
忍者ブログ [PR]