- 追加された行はこの色です。
- 削除された行はこの色です。
// * Subversion
#ls
#contents
* リポジトリを作る
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-branche
svn copy file:///〜/repos/projectA/trunk file:///〜/repos/projectA/tags/release-1.0
* 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
* リポジトリレイアウト
http://subversion.bluegate.org/doc/book.html#svn-ch-5-sect-6.1 とか参照
- 1つのリポジトリに複数プロジェクトを入れる
-- 管理(フック、定期バックアップ、プロジェクト間のデータ移動など)が楽
-- どれかのプロジェクトが更新されるとリビジョンが増える(リポジトリに対してグローバル)のが気持ち悪い
- 1つのリポジトリに1プロジェクト
-- 管理が面倒
-- コミットメーリングリスト/権限設定を分けたりが楽
一人で扱う分には割とどうでもいい気がする
* dump/load
標準入出力にて
* トラブルリカバー
** Berkeley DBが壊れたとき
svnadmin recover /path/to/svn/repos
- 他の人が作ったログファイルなどがあるとrecoverに失敗する(半端に成功する)
-- chownしてもらう(パーミッションを変えてもらうだけでいいのかも
- db内のファイルがパーミッション644に戻っているので''666にする''(そういう管理の時は
** DB_VERSION_MISMATCH
aptでいろいろ更新後
DB_VERSION_MISMATCH: Database environment version mismatch
svn: bdb: Program version 4.3 doesn't match environment version
http://subversion.tigris.org/faq.html#bdb43-upgrade を参考にしつつ、~
・・・なんか違うことしてたり。
+ svnadmin recover /path/to/svn/repos → エラー
+ 古い svnadmin の バイナリを拾ってくる
+ oldsvnadmin recover /path/to/svn/repos → エラー
+ svnadmin recover /path/to/svn/repos → エラー
+ touch 〜/db/log.0000000134
+ svnadmin recover /path/to/svn/repos
そのエラー
Repository lock acquired.
Please wait; recovering the repository may take some time...
svnadmin: DB_RUNRECOVERY: Fatal error, run database recovery
svnadmin: bdb: /path/to/svn/repos/db/log.0000000134: log file open failed: No such file or directory
svnadmin: bdb: PANIC: No such file or directory
svnadmin: bdb: DB_ENV->log_put: 134: DB_RUNRECOVERY: Fatal error, run database recovery
結局誰が悪いのやら。~
家の環境ではそもそも DB_VERSION_MISMATCH にならず。
** ファイルの追加失敗
commit成功したあとにupdateに失敗した場合
- 追加したファイルをいったん rm
- svn update
- commit log が残されたままになるので rm
commitメッセージ書いてる横でupdateとかしたら起こりました
* TortoiseSVN
- SSHクライアントが未指定だとわかりにくいエラーメッセージが出て困る
-- enとjpでは出てくるメッセージが違う(そしてどちらも本質を突いていない
* 属性削除
# 実行属性
svn propdel svn:executable FILELIST
# バイナリ
svn propdel svn:mime-type FILESIT
なんかインポートしたらバイナリだと判断されたものがあったりしたので
* 無視するファイル
# セット
svn propset svn:ignore PATTERN DIR
# 編集
svn propedit svn:ignore DIR