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

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

/ 2008/07/01 (Tue) / 編集
さて、以前にFedoraでSubversionしてましたがちょっとしらべたらMacOSXにもSubversionのサーバを立てることができるらしい(しかもプリインストール)ということがわかったので試してみようと思う。

まぁWebサーバに置いたときとちがって「持ち歩いてる」or「常にネット接続状態」じゃないと別のパソコンからはみれないんだがねw


(2008/9/29:「file://」を「URL」に変更、つまりネットワーク越しでも使えるよという意味。)

ちなみにURLというのは「file://~~~」「http://~~~」「svn://~~~」のこと

Subversionとは

バージョン管理ソフト、CVS(実験で使ったよね?)の仲間、CVSと違ってディレクトリの移動とかファイルの削除とかできる。 つまりディレクトリ構成とか決めてないうちに見切り発車できる。
MacOSX Leopardにはデフォルトでインストールされている
レポジトリには基本的に「branches(デバックや平行開発につかう)」「tags(おそらくバージョンごと保存しとく)」「trunk(メイン、つまり最新)」「working(作業用)」の4つのディレクトリを用意のがいいらしいが別にしたがわなくてもおけ

コマンド

まずはどんなコマンドがあるか調べてみた
  • svnadmin
  • Subversionの管理コマンド、レポジトリを作ったりとかそんなん
  • svn
  • Subversionのクライアント、ソースコードをcheckoutしたりcommitしたり
  • svnserve
  • Subversionのサーバを立てる、Macがネットからアクセスできる状態になっているなら「svn://」でレポジトリにアクセスできるようになる(らしい)
  • svndumpfilter
  • dumpするときにフィルタをかけられるらしい
  • svnversion
  • レポジトリのバージョンを調べれるらしい
  • svnlook
  • レポジトリに関するいろんな情報(authorとかinfoとかlogとか)がみれるらしい
  • svnsync
  • なんか同期がとれるらしい

レポジトリの作成

好きなとこで「%svnadmin create レポジトリ名」
%svnadmin create testrep
以下、ホームディレクトリ(~/)にレポジトリを作成した前提で話を進めます(つまり上のコマンドで「/Users/ユーザ名/testrep」ができたということ)

ちなみに中身は以下のような感じ
testrep/
+-- README.txt
+-- conf/
| +-- authz
| +-- passwd
| +-- svnserve.conf
+-- dav/
+-- db/
| +-- current
| +-- format
| +-- fs-type
| +-- revprops/
| | +-- 0
| +-- revs/
| | +-- 0
| +-- transactions/
| +-- uuid
| +-- write-lock
+-- format
+-- hooks/
| +-- post-commit.tmpl
| +-- post-lock.tmpl
| +-- post-revprop-change.tmpl
| +-- post-unlock.tmpl
| +-- pre-commit.tmpl
| +-- pre-lock.tmpl
| +-- pre-revprop-change.tmpl
| +-- pre-unlock.tmpl
| +-- start-commit.tmpl
+-- locks/
+-- db-logs.lock
+-- db.lock

Subversionサーバの起動

ローカル環境だけで使うならべつにやらなくてもいい、だがXcodeでSubversionを使いたいときは必要らしい。

設定ファイルは「/Users/ユーザ名/testrep/conf」に入っているもの

svnserve.confで環境設定

設定ファイル、とりあえず以下の三つをコメントイン(#を消す)
anon-access = read #認証してない人
auth-access = write #認証した人
password-db = passwd
ここで、「read=読み込み専用」「write=読み書き」「none=なんにもできない」の三種類を設定できる。
ちなみに「password-db」は相対パスや絶対パスでファイル指定してもおけ

ディレクトリごとやユーザごとなどの細かいアクセス制御をしたいときは「authz-db = authz」もいれとく
「realm」とやらを入れると「同じrealm名のレポジトリでおなじ認証を行うことができる」らしいがよくわからないので他サイト参照(暇があったら追記します)

passwdにパスワードの設定

以下のようにするとユーザ「myname」のパスワードが「mypasswd」になる
myname = mypasswd

authzでアクセス制御

ディレクトリごとやユーザごとの細かいアクセス制御ができる。だがまだよくわからないのでauthzファイルの書式は他サイト参照(暇があったら追記します)

svnserveコマンドでサーバ起動


%svnserve -d

レポジトリにファイルを追加

チェックアウト(checkout)

とりあえず最初はチェックアウト(checkout)
#サーバ立ててない人は「%svn checkout file://レポジトリの絶対パス」
%svn checkout file:///Users/ユーザ名/testrep/
#サーバを立てた人は「%svn checkout svn://Subversionのユーザ名@ホスト名/レポジトリの絶対パス」でもいい
%svn checkout svn://Subversionのユーザ名@localhost/Users/ユーザ名/testrep/

「%svn checkout レポジトリのURL」

するとコマンドを実行したディレクトリ内にレポジトリがダウンロードされて来ます (ここではサーバを立てなかったとして進めます)
そのなかにディレクトリやらファイルやらを作る(ここでは「~/temp」内にチェックアウトしたものとして進めます
[~/temp]%cd testrep/
[~/temp/testrep]%mkdir thrunk
[~/temp/testrep]%cd thrunk/
[~/temp/testrep/thrunk]%touch testfile
[~/temp/testrep/thrunk]%cd ../
[~/temp/testrep]%ls
thrunk/

それから「%svn add ファイル名」でレポジトリに追加(add)します
[~/temp/testrep]%svn add thrunk
A thrunk
A thrunk/testfile
2つ追加されました。

コミット(commit)

その後「%svn commit -m 'コメント'」で変更を適用(commit)します。
[~/temp/testrep]%svn commit -m 'test commit'
Adding thrunk
Adding thrunk/testfile
Transmitting file data .
Committed revision 1.
これでレポジトリへの登録は完了!、今後も新しいファイルを追加したときはadd、ファイルを書き換えたときはcommitします。

ログ(log)

さて、実際に更新してみようと思います。
[~/temp/testrep]%cd thrunk/
[~/temp/testrep/thrunk]%echo 'my name is yosilove' > testfile
[~/temp/testrep/thrunk]%svn commit -m 'edit testfile by me'
Sending thrunk/testfile
Transmitting file data .
Committed revision 2.

更新できた、一応更新ログを見てみます。
[~/temp/testrep/thrunk]%svn log testfile
--------------------------------------------
r2 | e055717 | 2008-07-01 22:13:02 +0900 (火, 01 7 2008) | 1 line

edit testfile by me
---------------------------------------------
r1 | e055717 | 2008-07-01 20:56:11 +0900 (火, 01 7 2008) | 1 line

test commit
-----------------------------------------------
きちんと更新できてるようです。

レポジトリのバックアップ

svnsyncコマンドでレポジトリのバックアップができるらしい

まずバックアップ先のレポジトリを作成(例によってホームディレクトリ直下)
%svnadmin create testrep_back

つぎに「testrep_back/hooks/pre-revprop-change」というファイルを作成、中身は「testrep_back/hooks/pre-revprop-change.tmpl」を編集した物でもいいが、今回は以下の内容で作成
%cat testrep_back/hooks/pre-revprop-change
#!/bin/sh
echo 0
実行権限も忘れずに!
%chmod +x testrep_back/hooks/pre-revprop-change

次に「%svnsync initialize file://バックアップ先リポジトリの絶対パス file://バックアップしたいリポジトリの絶対パス」でバックアップ先レポジトリを初期化 次に「%svnsync initialize バックアップ先リポジトリのURL バックアップしたいリポジトリのURL」でバックアップ先レポジトリを初期化
%svnsync initialize file:///Users/ユーザ名/testrep_back file:///Users/ユーザ名/testrep
Copied properties for revision 0.


そのあと「%svnsync sync バックアップ先リポジトリのURL」で同期を取る
%svnsync sync file:///Users/ユーザ名/testrep_back
Committed revision 1.
Copied properties for revision 1.
Committed revision 2.
Copied properties for revision 2.
できてるっぽい?

というわけでためしにチェックアウトしてみる
%svn checkout file:///Users/ユーザ名/testrep_back
A testrep_back/thrunk
A testrep_back/thrunk/testfile
Checked out revision 2.

ここで、「バックアップ先のレポジトリは読み出し専用(つまりaddやcommitはできない)」ということに注意




利用方法メモ

  • ファイルの情報を見たい
  • 「%svn info ファイル名」
  • 過去のデータを取り出したい
  • 「%svn log ファイル名」で過去ログを確認ー>updateやcheckoutで-rオプションを使う
  • ファイル構成を変更したい
    • ファイルやディレクトリの削除
    • 「%svn delete ファイル名」
    • ファイルやディレクトリの移動
    • 「%svn move 移動前ファイル名 移動後ファイル名」
    • ファイルやディレクトリのコピー
    • 「%svn copy コピー前ファイル名 コピー後ファイル名」

コマンドとかめんどくせぇ、、、という人は

SCPluginというFinder用プラグインがおすすめ
SCPlugin

拍手[0回]

PR
忍者ブログ [PR]