Subversion ベストプラクティス

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: ネット上で共有する場合; 柔軟な認証が可能; ブラウザでレポジトリを見れる; ログを残す場合。
  • レポジトリは1つか複数か?→場合による
    • 1つの場合: ユーザーは共有だしコードも共有。なのでメンテナンス負荷は減る (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$ キーワードは、あなたが思っているものとは違う
    • このコマンドはワーキングコピーのリビジョンがもとになる。
  • テンプレートを使う
    • ほとんどいつも同じファイルの取り扱い
      • リポジトリにテンプレートをコミットしておく
      • それをビルドシステムが新規ファイルとしてコピー
      • ユーザーはそのコピーを編集する

更新履歴

  • 2006-11-17 通りすがり氏からの指摘を反映しました。
  • 2006-11-17 Wikiの方での匿名の方の修正(→ 修正内容)を反映しました。
  • 2006-11-20 suginoy氏からの指摘を反映しました。
「Subversion」解説書 <バージョン管理システム> Linux world favorite series
「Subversion」解説書 <バージョン管理システム> Linux world favorite series
このサイトから - が購入しました
全体で -人 がクリック

posted with amazlet on 06.11.23
Subversion開発プロジェクト 上平 哲 佐藤 竜一
IDGジャパン
売り上げランキング: 179635
おすすめ度の平均: 4.0

4 読みやすいです
3 Subversionはまずこれを!
5 やはり書籍は読みやすい

コメント / トラックバック

コメント / トラックバック 4 件

  1. 通りすがり より:

    >Good for tricking people into using version control. :)

    みんなにバージョン管理を理解してもらえる。
    →みんなにバージョン管理してもらえる :)

    >Takes a long time

    長い時間が経過し、
    →時間がかかる

    >Why? Someone did something stupid, like checked in a list of passwords, government secrets, etc.

    誰かがやらかすよ。パスワードや機密情報をコミットしちゃったりね。
    →それでも必要なときがある。パスワードや機密情報をコミットしちゃったりするやつが…

    >$Revision$ doesn't do what you think

    $Revision$ で何も考えなくてよい。
    →$Revision$キーワードは、あなたが思っているものとは違う

    > ○ Use a template
    > + Dealing with a “mostly standardized file”:
    > # Commit a template of file to repository
    > # Have build system copy it to unversioned file
    > # Users edit unversioned file

    ○ テンプレートを使う
    # ほとんど同じファイルの取り扱い
    + リポジトリにテンプレートをコミットする
    + ビルドシステムがテンプレートをコピーする
    + ユーザーはそのコピーを編集する

    どうでしょう?

  2. あきやん より:

    >通りすがりさん
    ご指摘ありがとうございます!
    ご指摘のすべての箇所が「文脈的に微妙で怪しいなあ」と思っていた箇所なので、とても助かりました!

    全て反映させていただきました。
    ありがとうございました!

  3. suginoy より:

    本題とは関係ないですが、
    Every seat in this room is full.
    どの部屋も人でいっぱいだよ。
    →この部屋は人でいっぱいだよ。
    というのが一応、文字通りなのかなと。

  4. あきやん より:

    >suginoyさん
    ご指摘ありがとうございます!
    「この部屋は人でいっぱいだよ。」が正しいですね。反映しました。

    ありがとうございました!