Webプログラムで本番環境上にsvn exportしたものの、ちょっとしたバグを発見したので、svn レポジトリ上で修正したとします。


この修正の差分だけ本番環境上に反映させる簡単な方法を教えて下さい。

現在は、前の svn export したものを削除して、もう一度 svn export しており、全部のファイルをexportするので、時間もかかり億劫です。

svn merge は、svn管理下でないのでできないと考えています。

回答の条件
  • 1人2回まで
  • 登録:2007/03/14 20:34:40
  • 終了:2007/03/14 23:08:15

回答(1件)

id:Tietew No.1

Tietew回答回数12ベストアンサー獲得回数42007/03/14 21:58:48

ポイント100pt

作業コピー上で

$ svn diff -rPREV > patchfile

でdiffをとった後(PREV は最終コミットの直前のリビジョンです。不都合なら実際の修正前のリビジョン番号を入れる)、patchfile を本番環境に転送し、本番環境上で

$ patch -p0 < patchfile

とパッチを当てればよいです。patchfile はファイル名ですので好きな名前でどうぞ。

本番環境からsvnリポジトリにアクセスできるなら

$ svn diff -r修正前のリビジョン番号:HEAD (リポジトリURL) | patch -p0

とワンライナーにすることも可能です。(PREV は使えないので実際のリビジョン番号を。)

id:p_question

ありがとうございます。

本番環境に直接入って、レポジトリにアクセスできるので、シェルスクリプトで一発でパッチを当てられそうです。

2007/03/14 23:00:18
  • id:p_question
    と、思ったら以下のエラーでパッチが当たらないですね。うむむ。

    patching file hoge/foobar.sh
    Hunk #1 FAILED at 1.
    1 out of 1 hunk FAILED -- saving rejects to file hoge/foobar.sh.rej
    patching file hoge/foobar.sh
    Reversed (or previously applied) patch detected! Assume -R? [n]
  • id:Tietew
    hoge/foobar.sh が、パッチを作成したリビジョンから変更されている場合、Failします。リポジトリの指定したリビジョンと同一であるか確認しましょう。

    例えば svn diff -r130 で作ったパッチは、リビジョン 130 と同一のファイルに対してしか適用できません。(厳密にはそういうわけではないのでしが、patchについて理解できるまでそう思っておいて構いません)

    改行コードが問題になる場合もあります。svn:eol-styleプロパティを使って改行コードを固定してしまう方法もあります。
  • id:p_question
    今回の場合は、パッチを作成したリビジョンが違っていたためにFailしていたようです。

    わざわざありがとうございました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません