Subversion/使い方

Top / Subversion / 使い方

構築

リポジトリを作る

svnadmin create /path/to/svn/repos
svnadmin create --fs-type fsfs /path/to/svn/repos

FSFSはBerkeley-DBが使えない場合(NFS上で運用とか)

プロジェクトをリポジトリに追加

  • /tmp/projectA がプロジェクトのファイルがあるディレクトリとする
  • /tmp/projectAの中身は下記のようにしておくとよい
    • branches/
    • tags/
    • trunk/
      • プロジェクトのファイル
svn import /tmp/projectA file:///〜/repos/projectA -m 'initial import.'
  • /tmp/projectA
    • 絶対パスである必要なし
    • 省略すると .
  • file:///〜/repos/projectA
    • file:///〜/repos を指定するとリポジトリのトップにそのプロジェクトが置かれる
    • file:///〜/repos/Foo/Bar と適当に指定することもできる
  • -m 'initial import.'
    • commitのメッセージ

普段の作業

チェックアウト

svn co file:///path/to/svn/repos/projectA/trunk projectA
  • file:///path/to/svn/repos/projectA/trunk
    • 自分の取得したい範囲を指定
  • projectA
    • 展開するときのディレクトリ名
    • 指定しないとこと場合 trunk
svn co svn+ssh://user@host/path/to/svn/repos/projectA/trunk projectA

ブランチ / タグ付け

  • Subversionでは同じ扱い
  • コミット対象がブランチ
  • コミットしないで分岐時のリビジョンに名前を付ける目的のものがタグ
svn copy file:///〜/repos/projectA/trunk file:///〜/repos/projectA/branches/hoge-branch
svn copy file:///〜/repos/projectA/trunk file:///〜/repos/projectA/tags/release-1.0

ブランチのマージ

http://subversion.bluegate.org/doc/ch04s04.html

# trunkのworking copy内で
svn merge -r 分岐したときのリビジョン:最新のリビジョン ブランチのURL

属性削除

# 実行属性
svn propdel svn:executable FILELIST
# バイナリ
svn propdel svn:mime-type FILESIT

なんかインポートしたらバイナリだと判断されたものがあったりしたので

無視するファイル

# セット
svn propset svn:ignore PATTERN DIR
# 編集
svn propedit svn:ignore DIR

昔のファイルを操作

移動 / 別のファイルに置き換えてしまった場合など。
http://subversion.bluegate.org/doc/ch07s04.html 参照。

svn command -r OPERATIVE-REV item@PEG-REV

リビジョンPEG-REVのころのitemで特定されたオブジェクト(現在は違う名前かも知れない)に対し、
svn command -r OPERATIVE-REV を実行する。

リポジトリの中を見る

svn ls URL_OR_PATH [--xml]
svnlook tree /path/to/svn/repos [path/in/repos]

コミットログ修正

svnadmin setlog --bypass-hooks /path/to/svn/repos -r REV NEWLOGFILE

# 以下 hooks/pre-revprop-change が必要な方法
svnadmin setlog /path/to/svn/repos -r REV NEWLOGFILE
svn propedit --revprop -r REV svn:log

指定したリビジョン間で svn status っぽい出力を得る

svn diff -r ARG --summarize
# こちらは1リビジョンでの変更のみ
svnlook changed [-r REV] /path/to/svn/repos
# それぞれのリビジョンでの変更が見られる
svn log [-q] -v [-r ARG]

ファイルの move の履歴

svnlook history REPOS_PATH [PATH_IN_REPOS]

各行の変更者とリビジョン情報の取得

svn blame TARGET

リポジトリの整理

dump/load

svnadmin dump /path/to/svn/repos > DUMPFILE
svnadmin load /path/to/svn/repos < DUMPFILE

リポジトリ分割

svnadmin dump /path/to/svn/repos > DUMPFILE
svndumpfilter --drop-empty-revs --renumber-revs include PATH < DUMPFILE > DUMPFILE_PATH

パスがPATHを含むものだけダンプ。
svndumpfilter help 参照。

--drop-empty-revs --renumber-revsで関係ないリビジョン番号をスキップ。
load するときにリナンバリングされるのであんまり --renumber-revs は意味ない?

move/copyなどをした場合はコピー元も含めないと文句を言われる。

move + リビジョンスキップしたものを load しようとしたら怒られた。
最近のバージョンでは解決している。

リポジトリの移動後の working copy での処理

svn switch --relocate FROM_URL TO_URL [PATH ...]

svnserve

svnserveの起動

# 適当な権限のユーザになって
svnserve -d -r /path/to/svn/repos

参考

  • svn+sshはsvnserveを起動なくてもいい
  • svn+sshはsvnserveとは関係ないのでフルパスで指定しないといけない

svnserveで管理

  • svn://SERVER.NAME なアクセスになってしまう
    • ユーザレベルで動かしてるのにルートっぽいアクセスはないよなぁ・・・
  • 設定は /path/to/repos/conf/svnserve.conf が読まれる

複数人で管理(svn+ssh / file)

Berkeley-DB + 全開な方法

リポジトリのdb 777, db/* 666で動いてそうな気がする。

FSFS + Group手抜きバージョン@研究室

# sは初めからついてる
chmod g+sw db/

chmod g+sw db/*/
chmod g+w db/write-lock db/current

ちなみに NFS のロックではまるのか、コミット時に以下のエラーを吐かれた(昔はそんなことなかった気が。
svn, version 1.4.0 (r21228)

NFSのディスクを物理的に持っているマシンからだと成功。

svn: Can't get exclusive lock on file 'REPOS/db/write-lock': No locks available

Apache2

モジュールを有効化は省略。
最低限必要なのはこれだけ。

<Location /REPOS>
	DAV svn
	SVNPath /REPOS_PATH
</Location>

BASIC認証についての注意書は ここ

Apache2越しは read-only にする。
ここに Require user などを書けば特定のユーザのみ更新可能に出来る。

<LimitExcept GET PROPFIND OPTIONS REPORT>
	Deny from all
</LimitExcept>

その他

リポジトリレイアウトつれづれ

http://subversion.bluegate.org/doc/book.html#svn-ch-5-sect-6.1 とか参照

  • 1つのリポジトリに複数プロジェクトを入れる
    • 管理(フック、定期バックアップ、プロジェクト間のデータ移動など)が楽
    • どれかのプロジェクトが更新されるとリビジョンが増える(リポジトリに対してグローバル)のが気持ち悪い
  • 1つのリポジトリに1プロジェクト
    • 管理が面倒
    • コミットメーリングリスト/権限設定を分けたりが楽

一人で扱う分には割とどうでもいい気がする


トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2007-06-30 (土) 11:22:20 (6139d)