#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 ** ブランチのマージ http://subversion.bluegate.org/doc/ch04s04.html # trunkのworking copy内で svn merge -r 分岐したときのリビジョン:最新のリビジョン ブランチのURL * リポジトリレイアウト http://subversion.bluegate.org/doc/book.html#svn-ch-5-sect-6.1 とか参照 - 1つのリポジトリに複数プロジェクトを入れる -- 管理(フック、定期バックアップ、プロジェクト間のデータ移動など)が楽 -- どれかのプロジェクトが更新されるとリビジョンが増える(リポジトリに対してグローバル)のが気持ち悪い - 1つのリポジトリに1プロジェクト -- 管理が面倒 -- コミットメーリングリスト/権限設定を分けたりが楽 一人で扱う分には割とどうでもいい気がする * 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で関係ないリビジョン番号をスキップ。 move/copyなどをした場合はコピー元も含めないと文句を言われる。~ move + リビジョンスキップしたものを 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では出てくるメッセージが違う(そしてどちらも本質を突いていない * 細かな操作 ** 昔のファイルを操作 移動 / 別のファイルに置き換えてしまった場合など。~ http://subversion.bluegate.org/doc/ch07s04.html 参照。 svn command -r OPERATIVE-REV item@PEG-REV リビジョン''PEG-REV''のころの''item''で特定されたオブジェクト(現在は違う名前かも知れない)に対し、~ svn command -r OPERATIVE-REV を実行する。 ** 属性削除 # 実行属性 svn propdel svn:executable FILELIST # バイナリ svn propdel svn:mime-type FILESIT なんかインポートしたらバイナリだと判断されたものがあったりしたので ** 無視するファイル # セット svn propset svn:ignore PATTERN DIR # 編集 svn propedit svn:ignore DIR * 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関連 - FSFSを使う - NFSサーバで statd, lockd を動かす -- FreeBSDだとrc.conf.localあたりで rpc_lockd_enable="YES" rpc_statd_enable="YES" とか指定して /etc/rc.d/nfslocking start~ これができていないと lock できないとか言われる #ls