Subversion/ja

2006年4月1日以降、SourceForgeの開発者用のCVSサービスの供給停止によって我々(MediaWikiの開発者)は独自にソースコードリポジトリをセットアップしなければならなくなりました.

新しいリポジトリはSubversionを使用しています. SubversionはCVSよりも流行していて、とてもよく似たインターフェイスを提供しています.

2006年4月1日から2007年5月31日までの間、リポジトリはBrion(ブリオン)のオフサイトサーバ(http://www.leuksman.com)でホストされていました. 2007年5月31日以降、アムステルダムのWikimediaのサーバ(mayflower)でホストされています.

Subversionを使用するためには、公式のコマンドラインSubversionクライアントをダウンロードしなければなりません. Windows用のTortoiseSVNのような代替的なグラフィカルクライアントも使用することが出来ます.

Subversionのコマンドラインインターフェイスは一般的にCVSによく似ています. この記事は多くの便利なコマンドラインの基本的で部分的なガイドです. 完全なガイドについてはSubversionによるバージョン管理をご覧下さい. サーバへの書き込み権限を持っているのであれば、Subversionの先進的な機能について読むことをお勧めします. なぜなら遅かれ早かれ使うことになるからです.

リポジトリ
MediaWikiのリポジトリはブリオンの個人的なサーバでホストされ、http://svn.wikimedia.org/svnroot/mediawiki/からアクセス可能です. プロジェクトはおおよそ標準的な階層を使用しています:


 * branches
 * tags
 * trunk

試作品の作業はtrunkツリーで作成されます. Wikimediaサーバは製品利用のためにこのツリーにあるコードを動作させます. このツリーで作成されたパッチは'''コードを壊してはなりません. '''trunkの拡張的な部分を書き換えることも同様に避けるべきです. MediaWiki本体はtrunkのphase3サブディレクトリにあります.

Branchesは主要なコーディング作業、巨大なパッチをテストする、不安定なパッチをテストするなどのために使用されます. 開発者の中にはこのコードに独自のブランチを持っている人もいます. 新しい安定版リリースを準備するためにも使用されます(よく知られるベータ &rarr; リリース候補 &rarr; セキュリティ & メンテナンス修正のサイクル). それぞれの主要な安定版シリーズはREL_という独自のディレクトリを使います. 例えばMediaWiki1.9はREL1_9</tt>で公開されます.

Tags</tt>はその時点でのソフトウェアの状態を保存するために使用される特別な階層です. これはけっして変更すべきではありません. 新しいバージョンをリリースするときのみ使用します. この作業はMediaWikiリリースマネージャ一人(2007年2月時点ではBrion Vibber)によって取り扱われます.

wikimedia-web</tt>という名前の追加のサブプロジェクトがあります. http://www.wikimedia.org/ で設置されたWikimediaのポータルファイルをホストしています. Wikimedia財団かつ/もしくはWikimediaのシステムアドミニストレータに関連しないのであれば、通常は修正しません.

匿名による利用
リポジトリに対する書き込み権限を持たない場合で、通常のHTTP経由で匿名によるアクセスしなけばなりません. しかしながら、ここで示される多くの技術は開発者のための利用にも便利なので、匿名でサーバにアクセスする必要がない場合でもどうぞご覧下さい.

チェックアウト
最初に、MediaWikiのコードをチェックアウトしなければなりません. 次の構文を使用します:

svn checkout http://svn.wikimedia.org/svnroot/mediawiki/folders_to_download sub_folder_name

ウェブインターフェイス (ViewVC)を使用してコード構造をブラウズすることが出来ます. 異なった目的のためにそこにある3つのフォルダを使用して下さい:


 * Trunkはメイン開発ブランチです.
 * branchesは安定バージョンと複雑な機能の開発のために使用されます.
 * tagsはリリースされたバージョンを追跡するために使用されます.

URL構造は以下の通りです:


 * transport : http://svn.wikimedia.org
 * repository : /svnroot/mediawiki
 * branch/tag : /trunk, or /branches/REL1_9, or /tags/REL1_9_0
 * files : /phase3

古いCVSとは異なり、URLはbrachもしくはtagを指定するために使用されます.

MediaWikiの開発用のtrunkを"wiki"フォルダにチェックアウトします:

svn checkout http://svn.wikimedia.org/svnroot/mediawiki/trunk/phase3 wiki

エクステンションセットを"extensions"フォルダにチェックアウトします:

svn checkout http://svn.wikimedia.org/svnroot/mediawiki/trunk/extensions extensions

特定のリリースブランチで最新のコードをチェックアウトします:

svn checkout http://svn.wikimedia.org/svnroot/mediawiki/branches/REL1_9/phase3 REL1_9

ソフトウェアの特定のバージョンをチェックアウトします:

svn checkout http://svn.wikimedia.org/svnroot/mediawiki/tags/REL1_9_0/phase3 REL1_9_0

古いCVSとは異なり、匿名アクセスは完全に最新なので、コミットされた後で即座に修正されたコードを入手出来ます.

"trunk"もしくはブランチ部分を中止させないで下さい! リポジトリにあるすべてのファイルのすべてのリビジョンをチェックアウトすることを中止するのはとても馬鹿げています.

ワーキングコピーをアップデートする
ワーキングコピーをアップデートして最新のファイルを取得するためには、次のコマンドを使用します:

svn update

CVSとは異なり、SVNは削除されたファイルを除去するもしくは新しいディレクトリを作る必要はありません. 自動的にこの作業が行われます.

差分を作成する
差分、もしくはパッチはワーキングコピーで変更されたすべての内容を含むテキストファイルです. Bugzillaで新しい機能を提案するもしくはどの部分を修正するのかを提案する場合、パッチをアップロードして下さい.

現在のリポジトリから差分を作成するためには、次のコマンドを使用して下さい:

svn diff

通常、CVSとは異なり、どのファイルを変更したのかSVNに伝える必要はありません; しかしながら、リポジトリの部分の差分を取得したい場合、差分を取得するファイルを指定します:

svn diff includes/SpecialMyAwesomePage.php

SVNは"unified"の差分フォーマットをデフォルトで使用するので、"-u"オプションは渡されないことに注意して下さい.

差分を適用する
Subversionは差分を現在のワーキングコピーに適応する組み込みのコマンドを含んでいません(例えば、Bugzillaで公開された差分をレビューもしくはコミットするため); 代わりに、通常のpatch UNIXユーティリティを使用することが出来ます:

patch -p0 < patch_file

TortoiseSVNは差分を適用するための組み込みのサポートを持ちます.

ファイル構造を変更する
次の差分もしくはコミットに含めるために、次のコマンドを使用してファイルもしくはフォルダをワーキングコピーに追加することが出来ます:

svn add file.name

フォルダを追加する場合、無視されるリストにあるファイル以外、フォルダに含まれるすべてのファイルを追加します.

次のコミットもしくは次の差分でマークされたワーキングコピーからファイルもしくはフォルダを削除することが出来ます(自動的にワーキングコピーからファイルを削除するが、そのような方法でフォルダは削除しない):

svn delete file.name

ファイルもしくはフォルダがローカル修正を含まないことを確認して下さい. さもなければ強制しない限り、それらは削除されません.

変更をリバートする
ワーキングコピーで変更することが便利はないと思うのであれば、次のコマンドを使用してリバートすることが出来ます:

svn revert

コマンド用のパラメータを使用しなければなりません. ワーキングコピーでのすべての変更をリバートするためには、次のコマンドを使用します:

svn revert -R.

特定のファイルの変更をリバートするためには、次のコマンドを使用します:

svn revert file.name

リバートは追加されたファイル( を削除に使わなかったように、それらは削除されず、除去され"unknown files"と見なされます)を除去することも削除されたファイルを復元することも出来ます(両方とも手作業でもしくは で削除します).

ワーキングコピーの状態をチェックする
次のコマンドを使用してワーキングコピーの状態をチェックすることが出来ます:

svn status

項目の最初のカラムにいくつかの重要な文字があります. これは次のようなステータスを表示します:


 * M = あなたによって修正された項目
 * A = あなたによって追加された項目( を使用)
 * D = あなたによって削除された項目( を使用)
 * ? = 存在するがバージョンコントロールの管理下にない項目
 * ! = 見失っているもしくは不完全な項目(バージョンコントロールの管理下にあるが存在しない - おそらくは 無しで削除されたもの)

開発者のための使用方法
サーバへの書き込み権限を持つ場合、HTTPアクセスの代わりにSSHアクセスを利用することが出来ます. これは後で変更することがあるかもしれません.

SSHキーを作成する
SSHキーを作成するためにSourceforgeにある手引きに従います. パスワード句を覚え、秘密鍵(id_dsa</tt>もしくはid_rsa</tt>)を保存しておき、公開鍵を送ります(id_dsa.pub</tt>もしくはid_rsa.pub</tt>).

URLs
サーバ名  を すべてのコマンドで  に置き換えると(例えば、  ) ウェブアクセスを要求する機能のためにパスワードを入力しなければならない時に、通常の機能を利用することが出来ます. 時にはパスワードを複数回要求されることがあります. パスワードを間違えると、再び入力するように求められます.

例えば、最新のtrunkを匿名としてチェックアウトするためには、次のコマンドを使用します:

svn checkout http://svn.wikimedia.org/svnroot/mediawiki/trunk/phase3 wiki

開発者としてチェックアウトするためには、次のコマンドを使用します:

svn checkout svn+ssh://your_user_name@svn.wikimedia.org/svnroot/mediawiki/trunk/phase3 wiki

これを動作させるためには、あなたの身元確認をssh認証エージェントに追加しなければなりません. 例えば、秘密鍵が現在 に設置されている場合、次のコマンドを使用して追加しなければなりません:

ssh-add /home/tux/.ssh/tux.key

Windowsユーザ
SubversionクライアントのWindowsユーザはSSH秘密鍵を利用できるようにするためにここで言及されている次の手引きが必要になることがあるかもしれません.

オートプロパティ
追加するファイルのために列の最後の自動変換をどのように有効にするのかについてはSubversion/auto-propsをご覧下さい. すべての開発者はそれを使用すべきです.

コミット
コミットもしくはチェックインはワーキングコピーからウェブリポジトリへの変更を適用アクションです. そのためには次のコマンドを使用して下さい:

svn commit

エディタを設定しない限り、パラメータ無しでコマンドを使用すると失敗します. ファイルログのためのコメントを入力しなければならないからです. 次の形式の一つを使うことが出来ます:

svn commit --message="This is the log comment." svn commit --file=file_with_log_comment

ログメッセージにおいて、PHPの'$'表記法を使用する変数に参照して、シェルからそれらをエスケープすることを覚えて下さい.

CVSチェックアウトをSVNに変換する
リポジトリでファイルへのローカルな変更を続けたくない場合、新しいチェックアウトですべてを上書きすることは簡単です. LocalSettings.phpやカスタムスキンといったものはそのままにします.

svn co http://svn.wikimedia.org/svnroot/mediawiki/trunk/phase3 temp-checkout rsync -a temp-checkout/ /path/to/phase3/

次のコマンドはどのディレクトリも削除したくない場合です:

svn revert -R /path/to/phase3

次は古いCVSのディレクトリを除外したい場合です:

find. -type d -name CVS -print0 | xargs -0r rm -rf

それに注意して下さい ;)