Menu

Patch

develop (84)
novice123

開発に参加したい方へ>差分ファイル

差分ファイル

Tortoise SVN

差分ファイルを作る (Create Patch)

SubversionのCreate Patch機能でパッチファイルを作れます.変更したファイルのあるディレクトリで右クリックメニューから「Create Patch...」を選び,保存するファイル名を選ぶだけです.このファイルは一般的なUnified Diffに準じた形式となっています.

差分ファイルの適用 (Apply Patch)

TortoiseSVNのCreate Patch機能作成されたパッチはTortoiseSVNのApply Patch機能で適用することが出来ます.Create Patchで作られたファイルは通常のUnified Diffと互換性のある形式となっていますが,Apply Patch機能ではRevision番号などそれ以外の情報を使うので,GNU diffで作られたパッチを読み込むことは出来ません.

パッチを適用したいディレクトリで「Apply patch...」を実行するとファイル選択ダイアログボックスが出ますので適用したいファイルを選びます.するとファイル一覧の小窓の付いたDiff画面が開きます.小窓のファイルをクリックすると差分を適用した様子を見ることができます(この時点ではまだ変更されていません).小窓の上で右クリックして出るメニューをクリックして初めて適用されます.その際パッチと現在の作業コピーの間に衝突がある場合には自動的にオリジナルバージョンを取得した上でマージ画面となります.

GNU

差分ファイルの作成にはdiff, 差分ファイルの適用にはpatchが必要です.いずれもGNUで開発されたものですが,Windowsへの移植形態によっていくつかのバージョンがあります.GNU diffとしてのバージョンが同じでありながら異なる挙動をするものがあるのが困ります.

推奨のもの(GNU dfff 2.7)はこちらからダウンロードできます.WinCVS 1.2に付属のdiffも同じくGNU diff 2.7ですが,こちらはファイルのパスに空白があると正しく動作しません.

差分ファイルを作る (GNU diff)

directory1/ に元のファイル,directory2/ に変更後のファイルが入っている場合,

diff -ur --dos directory1 directory2 > sabun.diff

として差分ファイルsabun.diffを作ることができます.uはunified diffを作る指示,rはディレクトリ内の全てのファイルを対象にする指示です. --dosオプションは必ずつけてください.これがないと出力されるdiffファイルの改行コードがLFになり,patchをうまく適用することができません.

差分ファイルの適用 (GNU patch)

まず,適用元のファイルがdirectory3/ にあるとします.ここに上のsabun.diffを適用する場合にはdirectory3/ にカレントディレクトリを移動してから

patch -p1 --dos < sabun.diff

とします.-p1というのはディレクトリの1つ目を無視する指示です.作成側がdirectory1, directory2を使っているのに対し,適用側ではdirectory3と異なるディレクトリを使っていますのでこの指示が必要になります.階層の深さは差分ファイル作成時の指定により変わりますので適宜適切な数値を与えてください。

--dosは上で紹介した推奨patch独自のオプションで,変更後の改行コードをCR+LFにするためのものです.これがないと改行コードがLFになってしまいます.

問題なくパッチが当てられればdirectory3 の中に作成者のdirectory2と同じファイルが得られます.変更に失敗した部分があるときは,適用できなかった差分が*.rejというファイルの中に残りますので,あとは手動で適用することになります.


Related

Wiki: Introduction
Wiki: Join
Wiki: Upload

Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.