いつか役に立つ パッチの作成と適用について (Subversion + TortoiseSVN)
Subversion のクライアントである TortoiseSVN を使ったパッチの作成と適用について書きます。
パッチとは
パッチの作成とは、リビジョン間の差分情報をファイルに出力することで、
パッチの適用とは、その作成したファイルを使い、差分をとあるソースに反映させることです。
どんなときに使うか
変更を反映してほしい(したい)ときに使います。特に、自分のリポジトリとは関係のない環境―オープンソースと利用者、などに対して有効です。
あとは、1つの修正を複数の環境に適用させたいときなど。
マージと違うところは、たとえ変更履歴がないソースの差分であっても、確認しながら安全に適用できるという点があります。
※パッチの作成場所と適用場所は、同じディレクトリ構造である必要があります。
パッチの作成
例として下のファイルの差分のパッチを作成してみます。
memo.text の リビジョン 2 と、リビジョン 3 の差分のパッチを作成します。
memo.text (リビジョン 2)
aiueo
memo.text (リビジョン 3)
ai ni ueta yoshio kakikukeko
リポジトリーブラウザ、または作業フォルダからログを表示し、差分情報を取得したいリビジョン 2 つを選択して、右クリックより「Unified 形式で差分を表示」を選択します。
差分ファイルが表示されるので、これを適当な名前を付けて保存します。
左上の「File」より保存できます。
(文字化けを起こしている場合は、後述の文字化けを参照)
※この後のパッチの適用の作業に注意することとして、適用先のファイルのパスは、このパッチファイルの2-3行目あたりに書いてあるパスと同じにする必要があります。違う場合、メッセージの無い変なアラートがでます。一時的にフォルダパスを変える等して合わせます。
パッチの作成は以上です。
パッチの適用
下の memo.txt に、先ほど作成したパッチを適用します。
aiueo sashisuseso
適用したいファイルの場所にて、右クリック>パッチの適用 を選択します。
そうすると、下のような作業ウィンドウが開きます。
右のウィンドウの左には、パッチを適用する前、右には、パッチを適用した場合の内容が表示されます。
左のウィンドウには、パッチを適用するファイル一覧が表示され、連続して適用・修正することができます。
また、パッチの適用だけでなく直接入力することで編集も可能です。
以上で、パッチの適用は完了です。保存後、必要に応じてコミットを行います。
文字化けについて
日本語の TortoiseSVN を利用している際、パッチ作成において文字化けが起こる場合がある模様。
以下のサイトを参考にして修正します。(それでも解決しない場合があるそう。)
Subversion のパッチコマンドについてはこちらを参考
subversionで差分を作る。パッチをあてる。
10/16 追記
差分ビューアーは、デフォルトの TortoiseUDiff が見やすい。(文字化けもしていない?)