svnコマンド、Subversionクライアントに関するTips。
svn
タグ・ブランチを作成する
タグやブランチを作成するにはsvn copyでtrunkをコピーする。 例えば、現在のtrunkの状態にtags/release-1.0という名前を付けるには次のようにする。
属性(プロパティ)を付ける
バージョン管理されているファイルに属性を設定するには、svn propsetを使う。
他にも属性に関連するコマンドには次のようなものがある。
- propget
- 付与されている属性の値を表示する
- proplist
- 付与されている属性を一覧にして表示する
- propdel
- 付与されている属性を削除する
- propedit
- 外部エディタを使って属性の値を編集する
一度削除すると(作業コピーが残っていない限り)当然復元できないので、復元したい場合などは削除する前にsvnadmin dumpでダンプファイルを忘れずに作っておく。
GNOME keyringでのユーザ認証が要求される
Ubuntu 11.10で起きた問題。 GNOME keyringを使用していないのに関わらず、svnコマンドでの認証で次のようなエラーが表示される。
~/.subversion/configのauthセクションに以下の内容を追記して認証プラグインを無効にすると、
先のエラーは表示されなくなる。
/.gnome2/keyrings/login.keyringを削除することでも解決できる模様(未確認)。
svnadmin
リポジトリをリネームする
リポジトリをリネームする場合は、
- 新しいリポジトリ名で現在のリポジトリの複製を作る
- svn switch --relocateで作業コピーのURLを更新する
- 現在のリポジトリを削除する
という手順で変更できる。 例として、リポジトリと作業コピーがある状態でリネームする場合は次のようにする。
上記のような手順で作成したリポジトリrepo_oldと作業コピーrepoがあるとする。 まずは、リネームしたいリポジトリrepo_oldの複製を新しいリポジトリ名(ここではrepo_new)で作成する。
なお、svnadmin dump/loadではリポジトリのパーミッション、設定ファイル類はコピーされないので、忘れずにコピーする
次に、svn switch --relocateで作業コピーのURLを更新する。 更新の前後でURLが変わり、リポジトリUUIDはそのままとなる点に注意。
すべての作業コピーのURLの更新が終わったら、リネーム前のリポジトリを削除する。
リポジトリの一部分を切り出す
ダンプファイルからリポジトリツリーの一部分を取り出したり除外したりするにはsvndumpfilterを使う。
例えば、上記のような構成のリポジトリから、mod_fooだけを切り出して一つのリポジトリを作成するには次のようにする。
まずリポジトリのダンプファイルを作成する。
続いて、このダンプファイルから、mod_fooだけを含むようにsvndumpfilterでフィルタする。
後は、出来上がったmod_foo.dumpを新しいリポジトリにロードすることで、mod_fooだけを含むリポジトリを作成できる。
svndumpfilterで指定できるオプションは次のとおり。
- include
- 指定したパスを含む変更をフィルタして切り出す
- exclude
- 指定したパスを除く変更をフィルタして切り出す
- --drop-empty-revs
- フィルタした結果、切り出すサブツリーに関係する変更がないリビジョンはダンプファイルに含めない
- --renumber-revs
- フィルタした結果に、新しくリビジョン番号を振り直す
- --preserve-revprops
- もとのリビジョン属性を維持する(リビジョン属性はフィルタしない)
異なるバージョン間でのリポジトリ移動
あるバージョンのSubversionで管理されているリポジトリを、別のバージョンのSubversionで管理されている環境に移動する場合は、svnadmin dump/loadを使い次の手順で行う。
- バージョンAのsvnadminでリポジトリをダンプする
- バージョンBのsvnadminでリポジトリを作成
- バージョンBのsvnadminでダンプしたリポジトリをロードする
リポジトリを削除する
リポジトリを削除する場合は、svnadmin createコマンドで作成されるディレクトリを削除すればよい。 svnadminコマンドにはリポジトリを削除するためのコマンドは用意されていないので、rm -rで削除する。
リポジトリと初期ディレクトリの構成を自動的に作成するスクリプト
定形のリポジトリを自動的に作成する目的で作成したスクリプト。 このスクリプトは、リポジトリを作成したあと次のような初期ディレクトリ構成をリポジトリにインポートする。
また、設定ファイルのテンプレート.svnserve.confをコピーし、作成したリポジトリの設定ファイルに上書きする。
TortoiseSVN
TortoiseSVNの使い方。
自動的に属性を着けるには
TortoiseSVNの設定ファイルを編集することで、ファイルをリポジトリに追加する時点で自動的に属性を付与させることができる。 これにより「$Date$」などが自動的に日付に展開されるようになる。 また、拡張子からMIMEタイプを判断させるようにすることも出来る。 以下はその設定方法。
まずエクスプローラ上で右クリックし、メニューからTortoiseSVN→Settingsの順に選択。 続いて出現する画面からGeneralを選択し、「Subversion configuration file」の横にあるEditボタン(赤い矢印の部分)をクリックする。
テキストエディタが開いて設定ファイルの内容が表示されるので、次の内容を書き込む。
この設定をした上で、たとえばファイル中に「$Id$」と書いておくと次のように展開されるようになる。
$Idのあとに続けて、順に「ファイル名、リビジョン番号、最終変更日時、最後に変更を行ったユーザ」の各値が展開される。