外部リポジトリのバージョンアップの反映手順

例えば、「一部に自前の改修を入れたWordPressに、本家WordPressのバージョンアップを反映する場合」
svnを使って、自前の改修部分を損なうことなく、バージョンアップ差分を反映する方法の手順メモ

  • この方法は、以前の仕事上での経験をベースにしています。

普遍的な方法ではないかもしれませんし、もっと良い方法があるかもしれません。

  • この方法は、バージョンアップ後の正常動作を必ずしも保証するものではありません。
  • この方法は、バージョンアップ差分が比較的少量の場合に向いています。本家がメジャーバージョンアップなどで大幅に変わる場合は、適用が困難になるかもしれません。

cakephperさんのcakeplusが更新されていたので、これを例にします。

前提条件

  • 本家のソースはreplicaで管理します
  • 改修ソースは、trunkで管理しています
replica(本家ソース)の更新

本家の新バージョンソースを取得します。
 svn export、ダウンロードファイルの解凍 git update などなど
 ただ、svn checkout&updateは、.svnディレクトリがあるとこの後の操作が厄介なので、やめたほうが良いです。


本家の新バージョンソースを、replicaに反映します。

[cake@cake git]$ cp -R cakeplus/* ../../svn/src/replica/cakeplus

旧バージョンのソースが新バージョンで削除/移動されている、などのケースがないか、diffでチェックします。

[cake@cake git]$ diff -qr -x .svn -x .git cakeplus/ ../../svn/src/replica/cakeplus


削除/移動されているファイルがあった場合、手動で反映します。
修正後、再度diffして差分がないことを確認。


こんなことしなくても、replica以下を全削除して、新バージョンソースをコピーすれば?
・・・なんて最初思うのですが、SVNで管理してるソースの子ディレクトリを削除したり移動すると、大体なんかおかしくなるので・・・(--;)


svn stで追加/削除ファイルの状態確認

[cake@cake replica]$ svn st
M      cakeplus/tests/cases/models/behaviors/add_validation_rule.test.php
M      cakeplus/models/behaviors/add_validation_rule.php
M      cakeplus/README

今回は、ファイルの追加・削除はありませんが、あった場合svn add/delete処理。


svn diffで、どこが変わったのか一通り眺めてから、replicaをコミット。


今回、r180でコミットしたので、前回のrev 179との差分が「本家ソースのバージョンアップ分」となります。


これを、改修ソースに適用。

[cake@cake app]$ svn merge -r 179:180 svn+ssh://host/src/replica/cakeplus
/ ./plugins/cakeplus/
--- Merging r180 into 'plugins/cakeplus':
U    plugins/cakeplus/tests/cases/models/behaviors/add_validation_rule.test.php
U    plugins/cakeplus/models/behaviors/add_validation_rule.php
U    plugins/cakeplus/README


これで、本家バージョンアップ分の差分が反映されました。


今回、改修なしのcakeplusを用いているので全てUploadですが、改修ソースと関連する場合、GやCと表示されます。
適宜直し、動作確認などを行なってコミット。