Brad Choate: OSCON: Subversion Best Practicesの和訳に挑戦してみました！誤訳などありましたら遠慮無くコメントしてください。また、一部が原文のままです。

原文と訳文の併記版 (Wiki)がありますので、誤訳がないか確認される方はそちらをご覧になると便利かと思います。Wikiを直接修正していただいても結構です！

ちなみ私は英語初心者で、こういう翻訳作業は初めてです。また今回の翻訳にあたって一部をfjkktkys (fjkktkys blog)に添削していただきました。ありがとう！

それではどうぞ。

原文へ OSCON: Subversion Best Practices これは、たった今私が出席しているOSCONのまとめです。この部屋は人でいっぱいだよ。 このお話はグーグル勤務のBen Collins-Sussman と Brian W. Fitzpatrickによるものです。 Subversionサーバベストプラクティス svnとApacheどっちを使うか？ →場合による svnserve: 速くて軽くてすぐできる. 簡易セットアップ用。暗号化したければsvn+sshで。 Apache: ネット上で共有する場合; 柔軟な認証が可能; ブラウザでレポジトリを見れる; ログを残す場合。

レポジトリは１つか複数か？→場合による １つの場合: ユーザーは共有だしコードも共有。なのでメンテナンス負荷は減る (ASF uses a single repository for their entire directory of projects). 複数の場合: 全く異なるアクセスポリシーやデータ形式を適用できる (例えば、テキストとバイナリとかね).

認証ポリシー svn 1.3 からパスレベルの認証をサポート。 オープンソースが前提なら認証無しにもできる。 信頼感が生まれる。 全部消すなんて無理ってことよ。

レポジトリを閲覧する道具 何を使うべきか? Apacheがフリーブラウザと共に誕生したのだから、普通はブラウザでしょ。でも差分や注記の表示は未サポートなので、特定のリビジョンを指定しましょう。 ギークはsvnコマンドがお好き。 あとギークが好きなのは ViewVC, Trac とかそんなとこ。

フックスクリプト コミット前のフック (Pre-commit hooks) 処理中に変更をしないこと。代わりにエラーを吐いて処理を止めるよう。 我々が愛用するフック check-case-insensitive.py (コミット時に大文字小文字が異なる同じ名前のファイルがすでにあるか確認する) コミット後のフック (Post commit hooks) & を付けてバックグラウンドで実行する (訳注：時間のかかる処理をしてもコミットが遅くならないように) 我々が愛用するフック mailer.py (コミットをメールで通知) CIA bot (コミットをIRCで通知)

ロック/リザーブ チェックアウト 同時編集させなくすることができる。どんな時にこれらを使うのか？ バイナリファイルの変更; その他マージ出来ないファイル. あなたはそのようなファイル群のコンフリクトを防ぐためにロックを必要としていただろう。 svn:needs-lockプロパティが設定される。チェックアウト時にはファイルは読み取り専用になっていて、読み書きする度に修正しなければならない。ロックしようとしても出来ない。誰か他の人が編集中だから。

自動バージョン管理 Apache専用 コーディングのないプロジェクト向け 非エンジニア向け 旧来のコーディングプロジェクトには向いていない ログメッセージが無い 公開レポジトリは潜在的にEメールスパムのもとになる リビジョンが無い みんなにバージョン管理してもらえる。

レポジトリ管理 バックアップ: dump vs hotcopy dumpの場合。常に単体のリビジョンがチェックアウトされる。 hotcopyはレポジトリDBのファイルコピーである。 履歴の抹消は避けなければならない 時間がかかる。 ワーキングコピーが無効になる。 それでも必要なときがある。パスワードや機密情報をコミットしちゃったりするやつが… svndumpfilterには限界がある。 もし抹消する必要に迫られたら、抜粋してdumpしてみよう。 hotcopy vs rsync: 常にhotcopyを使ってバックアップを作り、できたバックアップをrsyncしよう。

コードレビューのススメ 頻繁にコミットしよう。 コミットは小さく、個々の塊で。 一貫性のあるログメッセージを使おう。 チームにコミットメールを送ろう。 例: バグ修正、コミット、バグ修正、コミット。

ブランチ 怖がらなくていいよ！ ブランチの種類 短期のタスクブランチ 中期のブランチ 長期のリリースブランチ リリースポリシーを持とう

マージ追跡 人間による管理が必要 ログメッセージにはマージを表す内容を書こう。 (編注: うちの場合は “svn merge” した結果を貼ってる) svnmerge.py Subversion 1.5: 真のマージ追跡！ いや、マジで。 Subversion trunkから入手できるようになる。 6ヶ月以内かな。

一つのlocaleへ標準化 全てのファイル名とログメッセージはUTF-8でサーバーに保存される。 一つのlocaleで頑張るか、あるいは。

Autopropsを使おう No, the server can’t transmit them to clients. 将来きっとね。 実用的なautoprops svn:mime-type svn:eol-style svn:needs-lock

クライアント側での便利なトリック 途中でブランチに切り替えられる その場で “import” $ cd dataset/ $ svn mkdir URL $ svn checkout URL . $ svn add * $ svn commit

Mixing and Matching Components svn:externals 空ディレクトリで svn switch

Subversionでウェブサイトを管理 ワーキングコピーを配置 .svn/へのアクセスを無効化する post-commitフックでワーキングコピーをアップデートする

svnversionを使う $Revision$ キーワードは、あなたが思っているものとは違う このコマンドはワーキングコピーのリビジョンがもとになる。

テンプレートを使う ほとんどいつも同じファイルの取り扱い リポジトリにテンプレートをコミットしておく それをビルドシステムが新規ファイルとしてコピー ユーザーはそのコピーを編集する



更新履歴