WP[検討]: TortoiseSVN(バージョン管理)をメンテに使うには。。?
Responces:
- No Responses yet
- コメントをどうぞ
- Trackback URI
- RSS 2.0: 更新情報
- RSS 2.0: Comments
今回のアップグレードでは、TortoiseSVN を使って、WordPress のリポジトリ上で差分ファイルを取得しました。
図解:

便利で楽にアップグレードできたのですが、こんな悩みや欲望も。。。
- 本番で使われているリポジトリ上で、差分を取ったりの作業がちょっと怖い。
ファイル壊しちゃったりしないかなーとか、負担かけないかなーとか。。 - PC 側にも常に WordPress の一式を持っておきたい。
- PC 上の一式にも差分ファイルを上書きすれば、最新にはなる。
- PC 上でバージョン間の差分を見たり、ファイルを修正したり元に戻したりとかもできたらいいなあ。そうしたら、PC 上で差分を取って、アップグレードに使えるし。。
- テーマやプラグインのカスタマイズ・作成も、バージョン管理できたら便利。
追記 コミット権限のない匿名アクセスになるので、誤ってファイルを壊してしまったりはしないそうです。安心していいよー
と、ひろまささん(上図(1))に教えていただきました。(ありがとう!) バージョンが離れている差分を取ったりはしないように、気をつけようと思います。
この妄想を図解:

これを実現すべく格闘中なのですが。。
PC 上のリポジトリに旧バージョンの配布パッケージファイルを持ってきて、バージョン管理下に置くことはできたのですけれども、それを新バージョンに置き換えることができません。 上書きしようとするとエラー、削除後追加だと差分が取れず。。(・;)
TortoiseSVN を WordPress のメンテやカスタマイズなどに活用している方がいらっしゃったら、どんな風に使われているか教えてください~~。
追記 以下、考えたこと・試したことをつらつらと追記していきます。いい方法が見つかったら、別ページにまとめ直します。
(復習)バージョン管理システムで何をしたいか?
管理対象:
- 自作プラグイン、自作テーマ
- 他の作者のプラグインをカスタマイズする場合
- WPコアをカスタマイズする場合 — (2.3 に上げてからはしてない)
- それら込みの、サイトで使っているファイル一式
したいこと:
- 更新履歴の保持
- ファイル間・バージョン間の差分を見る
- ファイルを修正したり、過去のある時点やオリジナルの状態に戻したり、を、簡単にできるようにしたい。
現在は、ファイルを複製・リネームして退避させておいたり、修正箇所に決まったコメントを入れたり、記事にメモしたりしている。
でも、何パターンか試すとファイル数が増えるし、この複製/修正を、いつ何のためにしたんだったか、などの管理が面倒。ある目的で複数のファイルを修正すると、別途メモしておかないと管理できない。 - ある時点のサイトのファイル一式の状態を保持、いつでも取り出せるようにしたい。
従来は、WP のアップグレード時に何かトラブルがあったら、すぐに元の状態に戻せるように、アップグレード直前のファイル一式を複製・リネームして保存してきた。アップグレードの度にこのセットが増えるし、アップグレード時に一旦外したプラグインなどもからんで、徐々にごちゃごちゃしてきた。。 - アップグレード時のファイル置換を楽にしたい。
svn、いいなあー。s201 サーバは svn が使えないので諦めたが、PC 上のファイル一式の更新を楽にできないかなあ、と。。上書きで済むアップグレードはまだいいが、ファイル構成が変わるときは、ファイル削除に気を使って面倒。
どういうリポジトリ構成にするか?
各自作プラグイン・テーマは、少なくとも「プロジェクト」は分けたい。自作モノをバージョン管理しつつ「したいこと 4」をするには、WP コアのディレクトリ構成の中に自作プラグインやらテーマやらを置けないといけない。「したいこと 5」をするには、WP コアは本家リポジトリからもってこないといけない。。?
そこで、TortoiseSVN のヘルプにあった「共通のサブプロジェクトを含める」ができるか試してみた。方法は 3種類。
svn:externalsを使用する- ネストした作業コピーを使用する
- 相対位置を使用する
設定がまだ分からないので 2 から試す。。
テスト用に、PC 上に ps全体リポジトリ(WPコア・自作モノ抜き)と、自作プラグイン ps_post_listing 用リポジトリを用意。
「ネストした作業コピーを使用する」方式
- ps全体リポジトリから、作業用フォルダへチェックアウト。
- 作業フォルダ内に
wordpressフォルダを作成し、本家リポジトリからチェックアウト。- 右クリック、「SVNチェックアウト…」 を選択
- チェックアウト画面で次のようにして、[OK] をクリック
- リポジトリのURL:
http://svn.automattic.com/wordpress/tags/2.3.3 - チェックアウトディレクトリ:
D:\websites\s201n\wordpress - トップフォルダのみ・外部参照除外はオフのまま、最新のリビジョン
- リポジトリのURL:
- チェックアウト中… 終了!
ここで脱線
アクションはほとんどが「追加」だが、akismet のみ「外部」。akismet が外部プロジェクトになってるみたいなので、勉強がてら探ってみる。。
- 作業フォルダに取り出せたファイルのプロパティを開くと、Subversion タブの URL は次のとおり:
hello.php:http://svn.automattic.com/wordpress/tags/2.3.3/wp-content/plugins/hello.phpakismetディレクトリ:http://svn.wp-plugins.org/akismet/trunkakismet.php:http://svn.wp-plugins.org/akismet/trunk/akismet.php
- 属性は、
svn:eol-style、値native akismet.phpのログも見られる。一番上は リビジョン30843、2008.2.5付http://svn.automattic.com/wordpress/tags/2.3.3/wp-content/pluginsには、akismetは入っていない。が、pluginsディレクトリの属性を見ると、- 属性:
svn:externals - 値:
akismet http://svn.wp-plugins.org/akismet/trunk
- 属性:
… svn:externals を使うパターンだったー。(; ´Д`)
本家 WP リポジトリから WPコアをチェックアウト/エクスポートすると、自動的にプラグインリポジトリから akismet のファイルを引っ張ってきてくれる。
脱線ここまで
… せっかくなので、「ネストした作業コピー」で WP コアをバージョンアップできるか、まで試してみよう。チェックアウトからやり直し。
- ps全体リポジトリから、作業用フォルダ
s201nへチェックアウト。 s201n/wordpressフォルダを作成し、本家リポジトリhttp://svn.automattic.com/wordpress/tags/2.3.*2*からチェックアウト。pluginsディレクトリ下にps_post_listingフォルダを作成し、ローカルプラグインリポジトリからチェックアウト。- 本番で使っている
wp-config.phpを作業フォルダにコピー。でも、wordpressディレクトリは本家リポジトリ管理下なので、追加してもうちのリポジトリには入れられなさそう。。とりあえず管理外のまま。 - 試しに
ps_post_listing.phpを修正して、その状態で WPコアをバージョンアップしてみる。 6.wordpressを右クリック、「TortoiseSVN」 - 「切り替え…」で、2.3.*3*を選んで [OK]
結果:
- 作業フォルダの
version.phpは2.3.3になっている。 OK wp-config.phpは管理外のまま。 OK- 修正しておいた
ps_post_listing.phpもそのまま。 OK - 管理外の
wp-config.phpと、本家管理下のwp-config-sample.phpの差分 →見られる。 OK - フォルダごとに管理リポジトリは違えられるが、
wordpress/直下のwp-config.phpはローカル管理に入れられないっぽい。 NG
「svn:externals を使用する」方式
- ps全体リポジトリから、作業フォルダ
s201eへチェックアウト。 s201eを右クリック、「TortoiseSVN」 - 「属性…」- 追加ボタンをクリック、ドロップダウンから
svn:externalsを選びwordpress http://svn.automattic.com/wordpress/tags/2.3.3と入力。
- 追加ボタンをクリック、ドロップダウンから
s201eを右クリック、「SVN 更新…」 → 本家リポジトリからs201eへコピーされる。s201eを右クリック、「SVN コミット」
結果:
- psリポジトリを見ると、
trunkにさっきの属性が入っている。 - 作業コピーのほうは、
wordpressには SVN URL はなく、その中のディレクトリやファイルは 本家リポジトリのURL。 pluginsの属性svn:externalsにakismetが入っている。
ここに自作プラグインリポジトリも追加しようとすると、akismet のが置き換わってしまった。複数はだめらしい。
akismetに当たる部分が省略できないみたいなので、各プラグインディレクトリには直接は設定できないし。。ということで、この方法は、複数ある自作プラグインには使えそうにない。 NG
……。
なんだか比較にならないテストになってしまった。結構がんばったのに。。orz
上の 2つの方法は、例えば、フォルダに入っていないプラグインを追加・コミットしようとすると、本家リポジトリへのコミットになってしまうことは分かった(.svn を持てないため)。(追加じゃなくてインポートならリポジトリを変えられそうだけれど、よくわからん。。)
WPコアとそれ以外をまとめるのは、今のぼのには難しそうな気配。。
ただ、以前は set names utf8 や記事の抜粋処理を直していたが、前者は wp-config.php でできるようになり、後者はプラグイン化してもらえて、現在はコアを触っていないので、優先度は落ちるかなあという感じ。


