第6,7回ASUB会(朝にサブバージョンを学ぶ会)

第6章 一般的なSubversionコマンド

複数のディレクトリやファイルを一度にupdate

svn update aaa bbb ccc
update時のステータスについて
$svn update
U  index.html  #=> 中身に変更があった
UU sitemap.xls #=> 中身と属性に変更があった
 U _notes      #=> 属性だけに変更があった
  • A…ファイル追加
  • U…アップデート
  • D…削除
  • G…マージ
  • C…コンフリクト

という意味。ステータスは2列あり、左はファイルの内容について、右は属性についての変更を示す。

ファイルやディレクトリの追加
svn add timelib

timelibをバージョン管理に加える例。再帰的に追加したくない場合は--non-recursiveオプションをつける。

属性の操作

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 #=> 属性の削除
キーワード展開

Subversionのテンプレート機能。リビジョン番号や最終更新日をテキストに埋め込める。使うことはなさそうだし、本書でも強く非推奨となっていたので省略。

特定のファイルやディレクトリを管理対象外とする(svn:ignore)
svn propedit svn:ignore timelib #=> *.class *.bakとかっていれる

再帰的に適用することはできない。propsetと-Rの組み合わせでできるがignoreの中身をすべて上書きしてしまうので注意

属性の自動設定

属性を自動で設定する機能。
_notesを自動で管理対象外とするとかをしたかったのだけどうまくいかなかった

ファイルのコピー
svn copy from_name to_name

普通のコピーではなく変更履歴が受け継がれる

名前変更
svn move from_name to_name

こちらも変更履歴が受け継がれる
ディレクトリを移動した場合、そのディレクトリ内にignore設定してあるファイルなどがあると、そのディレクトリとファイルは削除されずに管理対象外のファイル群として残るようだ

直接リポジトリのファイルを操作

大量のファイルを移動するときなどに便利

svn copy -m "rename xxx" svn://aaa/bbb/trunk/main svn://aaa/bbb/trunk/newmain

Subversion実践入門:達人プログラマに学ぶバージョン管理(第2版)

Subversion実践入門:達人プログラマに学ぶバージョン管理(第2版)