「Subversion実践入門」を読み終えて(ASUB会まとめ)
4月11日ごろからid:taje4120と毎朝少しずつSubversion実践入門という本を読んだ。
朝にサブバージョンを勉強する会だからASUB会と名前をつけた。
その勉強会も終わり、1週間ほどたったので復習をかねて内容をまとめる。
「Subversion実践入門」を読んで得られたこと
本書を読む前によくわかっていなかったことをベースにふりかえる
いまcommitしたら何がcommitできるか知りたい
svn status [file_name]
いまupdateしたら何がupdateされるのか知りたい
svn status --show-updates #-uだけでもOK
trunk branches tagsの使い分け
プロジェクトのリポジトリは以下のようにツリーを分けるのが慣習になっている
- 開発のメインラインとしてのトランク(trunk)
- 完成したコードをまとめるブランチ(branches)
- プロジェクトのイベントを記録するタグ(tags)
タグを作るタイミング
()内は名前の付け方
- リリースするとき(REL-リリースバージョン)
- 大きなバグの修正前と修正後(PRE-チケット番号, POST-チケット番号)
ブランチを作るタイミング
()内は名前の付け方
- リリース準備(RB-リリースバージョン)
- 大きなバグ修正(BUG-チケット番号)
- 実験(TRY-説明)
たとえばソフトウェアのリリースが近くなったらリリースブランチを作り仕上げを行う。リリースブランチでのバグ修正などはトランクにマージする。
svn mkdir -m "creating branche" svn://example/sesame/branches svn copy -m "creating RB-1.0" svn://example/sesame/trunk svn://example/sesame/branches/RB-1.0
mergeのやり方
mergeはいろいろなやり方がある。僕の場合はツリーをmergeすると考えると非常にややこしいので、あるディレクトリからあるディレクトリにupdateすると考えたほうがわかりやすかった。mergeはリモートからローカル、もしくはローカルからローカルで行う。
特定のブランチの変更を作業コピーにリビジョンを指定してマージする
svn merge -r37:39 svn://localhost/dirname
(37と39の数字を逆にして、変更を戻すこともできる)
特定のタグと特定のタグの間の変更を作業コピーにマージする
svn merge svn://localhost/tags/PRE-ticket_id svn://localhost/tags/POST-ticket_id
PRE-ticket_idからPOST-ticket_idまでの変更をマージしている
この方法でローカルのディレクトリ同士もマージできる
update時のステータスについて
気がついてなかったけど、ステータスは2列あった
$svn update U index.html #=> 中身に変更があった UU sitemap.xls #=> 中身と属性に変更があった U _notes #=> 属性だけに変更があった
- A…ファイル追加
- U…アップデート
- D…削除
- G…マージ
- C…コンフリクト
属性の操作
Subversionではファイルやディレクトリに属性をつけることができる。属性の名前は自由につけることができるがsvnで予め予約されている属性名というものがあり、それは使用できない。通常予約済みの属性はsvn:〜で始まる
svn propset checked-by "toyoshi" Number.txt #=> Number.txtにchecked-byという名前の属性をtoyoshiで付ける svn propedit checked-by Number.txt #=> エディタを開いて属性をセット(複数行設定できる) svn proplist Number.txt #=> 設定されている属性を一覧 svn propget checked-by Number.txt #=> 属性の値を取得 svn propdel checked-by Number.txt #=> 属性の削除
setやlistは-Rで再帰的に実行できる