オプション

-b or --backup
バックアップファイルを作成します。つまり、ファイルにパッチを適用するときに、元のファイルを削除する代わりに名前を変更するかコピーします。バックアップファイル名の決め方については、-Vまたは--version-controlオプションを参照してください。
--backup-if-mismatch
パッチがファイルに完全には一致せず、ほかの指定によってバックアップを作成することにもなっていない場合、そのファイルをバックアップします。patchがPOSIXに準拠していない場合の既定動作です。
--no-backup-if-mismatch
パッチがファイルに完全には一致せず、ほかの指定によってバックアップを作成することにもなっていない場合、そのファイルをバックアップしません。patchがPOSIXに準拠している場合の既定動作です。
-B pref or --prefix=pref
バックアップファイル名をsimple方式で決定し(-V methodまたは--version-control methodを参照)、名前を生成するときにファイル名へprefを付けます。たとえば、-B /junk/を指定すると、src/patch/util.cの簡易バックアップ名は/junk/src/patch/util.cになります。
--binary
標準出力と/dev/ttyを除くすべてのファイルをバイナリーモードで書き込みます。読み込み時には、CRLFの行末をLFに変換する経験則を無効にします。POSIX以外のシステムで生成したパッチを、POSIXシステム上でPOSIX以外の形式のファイルに適用する際に、このオプションが必要です。POSIXシステムでは、ファイルの読み書きで行末を変換することはありません。Windowsでは、既定で読み書き時に行末を変換するため、行末の違いが重要な場合はdiff --binaryでパッチを生成するべきです。
-c or --context
パッチファイルを通常のコンテキスト差分として解釈します。
-d dir or --directory=dir
ほかの処理を行う前に、直ちにディレクトリdirへ移動します。
-D define or --ifdef=define
#ifdef ... #endif構文を使って変更箇所を示します。条件を区別するシンボルにはdefineを使用します。
--dry-run
実際にはどのファイルも変更せず、パッチを適用した場合の結果を表示します。
-e or --ed
パッチファイルをedのスクリプトとして解釈します。
-E or --remove-empty-files
パッチ適用後に空になった出力ファイルを削除します。通常、patchはヘッダーのタイムスタンプを調べて適用後にファイルが存在すべきか判定できるため、このオプションは不要です。ただし、入力がコンテキスト差分でない場合や、patchがPOSIXに準拠している場合は、このオプションを指定しない限り、パッチ適用後の空ファイルを削除しません。ファイルを削除するときには、空の祖先ディレクトリも削除しようとします。
-f or --force
ユーザーが自分のしていることを完全に理解しているものとみなし、質問を一切しません。対象ファイル名がヘッダーにないパッチは読み飛ばします。ファイルのバージョンがパッチのPrereq:行と異なっていても適用します。パッチが反転しているように見えても、反転していないとみなします。このオプションは処理状況の説明表示を抑えません。説明表示を抑えるには-sを使用してください。
-F num or --fuzz=num
最大曖昧度を設定します。このオプションはコンテキストを持つ差分にだけ適用され、ハンクを適用する位置を探す際に、指定した数までのコンテキスト行を無視させます。曖昧度を大きくすると、誤ったパッチ適用が起きる可能性が高くなることに注意してください。既定の曖昧度は2です。コンテキスト差分のコンテキスト行数(通常は3)以上の曖昧度を指定すると、すべてのコンテキストを無視します。
-g num or --get=num
RCSまたはSCCSの管理下にあるファイルについて、そのファイルが存在しない場合、または読み取り専用で既定のバージョンに一致する場合の動作を制御します。また、ClearCaseまたはPerforceの管理下でファイルが存在しない場合の動作も制御します。numが正なら、バージョン管理システムからファイルを取得(チェックアウト)します。0なら、RCS、ClearCase、Perforce、SCCSを無視し、ファイルを取得しません。負なら、ファイルを取得するかユーザーに尋ねます。環境変数PATCH_GETが設定されていれば、その値がこのオプションの既定値になります。設定されていなければ、既定値は0です。
--help
オプションの概要を表示して終了します。
-i patchfile or --input=patchfile
patchfileからパッチを読み込みます。patchfileが-なら、既定の場合と同じく標準入力から読み込みます。
-l or --ignore-whitespace
ファイル内のタブや空白が変わってしまった場合に備え、パターンを緩やかに照合します。パッチファイル内の1文字以上の空白(スペースまたはタブ)の並びは、元のファイル内の任意の空白の並びに一致します。行末の空白の並びは無視します。通常の文字は、引き続き完全に一致する必要があります。コンテキストの各行も、元のファイルのいずれかの行に一致する必要があります。
--merge or --merge=merge or --merge=diff3
diff3(1)やmerge(1)と同様に、パッチファイルを元のファイルへマージします。競合が見つかると、patchは警告を出し、競合部分を<<<<<<<行と>>>>>>>行で囲みます。典型的な競合は次の形です。
<<<<<<<
lines from the original file
|||||||
original lines from the patch
=======
new lines from the patch
>>>>>>>

例のlines from the original fileは元のファイルの行、original lines from the patchはパッチ内の変更前の行、new lines from the patchはパッチ内の変更後の行を表します。

--mergeの省略可能な引数は、競合の出力形式を決めます。diff3形式では、パッチ内の変更前の行を含む|||||||の部分を表示します。merge形式では、この部分を表示しません。既定はmerge形式です。

このオプションを指定すると--forwardも有効になり、--fuzz=numオプションは考慮されません。

-n or --normal
パッチファイルを通常形式の差分として解釈します。
-N or --forward
パッチを適用できない場合、通常のpatchは最初のハンクを逆に適用してみて、すでに適用済みのパッチに見えるか調べます。--forwardはこの確認を行わないようにします。-Rも参照してください。
-o outfile or --output=outfile
ファイルをその場で変更する代わりに、outfileへ出力します。outfileがパッチ適用対象のファイルのいずれかである場合、このオプションを使用してはいけません。outfileが-なら、出力を標準出力へ送り、通常は標準出力へ送るメッセージを標準エラー出力へ送ります。
-pnum or --strip=num
パッチファイル内で見つかった各ファイル名から、先頭側にあるnum個のスラッシュを含む最短の接頭部分を取り除きます。隣接する1個以上のスラッシュの並びは、1個のスラッシュとして数えます。パッチの送り手とは異なるディレクトリにファイルを置いている場合などに、パッチファイル内の名前をどのように扱うか制御できます。たとえば、パッチ内のファイル名が次のようになっているとします。
/u/howard/src/blurfl/blurfl.c

-p0を指定すると、ファイル名全体を変更せずに使用します。-p1なら、

u/howard/src/blurfl/blurfl.c

のように先頭のスラッシュを取り除きます。-p4なら、

blurfl/blurfl.c

となります。-pを指定しなければ、単にblurfl.cを使用します。いずれの場合も、現在のディレクトリか、-dで指定したディレクトリから、その名前を探します。

--posix
次のように、POSIX規格へより厳密に準拠します。
  • 差分ヘッダーからファイル名を推測する際、(変更前、変更後、index)のリストの中で最初に存在するファイルを選びます。
  • パッチ適用後に空になったファイルを削除しません。
  • RCS、ClearCase、Perforce、SCCSからファイルを取得するかどうかを尋ねません。
  • コマンドラインでは、すべてのオプションをファイルより前に置く必要があります。
  • 不一致があってもバックアップファイルを作成しません。
--quoting-style=word
出力する名前をwordで指定するスタイルで引用します。wordには、次のいずれかを指定します。
literal
名前をそのまま出力します。
shell
名前にシェルのメタ文字が含まれている場合や、出力が曖昧になる場合に、シェル用に引用します。
shell-always
通常は引用が不要な名前でも、シェル用に引用します。
c
C言語の文字列と同じように名前を引用します。
escape
cと同様に引用しますが、前後の二重引用符は付けません。

--quoting-styleの既定値は、環境変数QUOTING_STYLEで指定できます。この環境変数が設定されていなければ、既定値はshellです。

-r rejectfile or --reject-file=rejectfile
拒否されたハンクを、既定の.rejファイルではなくrejectfileへ出力します。rejectfileが-なら、拒否されたハンクを捨てます。
-R or --reverse
変更前と変更後のファイルが入れ替わった状態でパッチが作成されたものとみなします。残念ながら、人間のすることなので、こうしたことは実際に時々起こります。patchは適用前に各ハンクを逆にしようとします。拒否されたハンクも逆にした形式で出力します。ed形式の差分スクリプトでは逆の操作を再構成する情報が少なすぎるため、-Rは動作しません。

最初のハンクの適用に失敗すると、patchはハンクを逆にして適用できるか試します。逆にすれば適用できる場合は、-Rを有効にするか尋ねます。逆にしても適用できなければ、パッチを通常どおり適用し続けます。ただし、この方法では、通常形式の差分で最初のコマンドが追加(本来は削除であるべきもの)の場合、反転したパッチを検出できません。空のコンテキストはどこにでも一致するので、追加は常に成功するためです。幸い、ほとんどのパッチは行を削除するよりも追加・変更するため、反転した通常形式の差分の多くは削除から始まります。その削除が失敗すると、この経験則による判定が働きます。

--read-only=behavior
読み取り専用のファイルを変更しようとした場合の動作を指定します。問題になり得ることを無視するignore、警告するwarn(既定値)、失敗させるfailのいずれかです。
--reject-format=format
rejectファイルを指定したformat(contextまたはunified)で生成します。このオプションを指定しない場合、入力がunified形式のパッチなら拒否されたハンクもunified形式で出力し、それ以外は通常のコンテキスト差分形式で出力します。
-s or --silent or --quiet
エラーが発生しない限り、表示を抑えて動作します。
--follow-symlinks
入力ファイルを探すときにシンボリックリンクをたどります。リンク先のファイルを変更するのではなく、シンボリックリンク自体を置き換えます。シンボリックリンクに対するGit形式のパッチは適用できなくなります。このオプションは以前のpatchとの後方互換性のために存在し、使用は推奨されません。
-t or --batch
-fと同様に質問を抑えますが、前提がいくつか異なります。ヘッダーにファイル名がないパッチは読み飛ばします(-fと同じです)。ファイルのバージョンがパッチのPrereq:行と異なる場合、そのパッチを読み飛ばします。パッチが反転しているように見える場合は、反転しているとみなします。
-T or --set-time
コンテキスト差分のヘッダーにあるタイムスタンプから、パッチ適用後のファイルの変更時刻とアクセス時刻を設定します。タイムスタンプに明記されていなければ、コンテキスト差分のヘッダーはローカル時刻を使用しているものとみなします。

タイムゾーンを含まないタイムスタンプでこのオプションを使用することは推奨されません。ローカル時刻を使うパッチは、別のタイムゾーンにいる人が簡単に使用できず、夏時間の調整で時計を戻す際にはローカルのタイムスタンプが曖昧になるためです。タイムスタンプにタイムゾーンを含めるか、UTCを使用してパッチを生成し、代わりに-Zまたは--set-utcを使用してください。

-u or --unified
パッチファイルをunified形式のコンテキスト差分として解釈します。
-v or --version
patchのリビジョンヘッダーとパッチレベルを表示して終了します。
-V method or --version-control=method
methodを使ってバックアップファイル名を決定します。この方式は環境変数PATCH_VERSION_CONTROLでも指定でき、それが設定されていなければVERSION_CONTROLでも指定できます。このオプションの指定は環境変数より優先します。方式の指定は、バックアップを作成するかどうかには影響せず、作成するバックアップファイルの名前だけに影響します。

methodの値は、GNU Emacsのversion-control変数に似ています。patchは、より説明的な同義語も受け付けます。使用できる値は次のとおりです。一意に判別できる省略形も使用できます。

existing or nil
すでに番号付きバックアップがあるファイルには番号付きバックアップを作成し、それ以外には簡易バックアップを作成します。これが既定値です。
numbered or t
番号付きバックアップを作成します。ファイルFの番号付きバックアップ名はF.~N~となり、Nはバージョン番号です。
simple or never
簡易バックアップを作成します。-Bまたは--prefix、-Yまたは--basename-prefix、-zまたは--suffixで、簡易バックアップの名前を指定できます。これらを指定しない場合は、簡易バックアップ用の接尾辞を使用します。環境変数SIMPLE_BACKUP_SUFFIXが設定されていればその値を、設定されていなければ.origを使用します。

番号付きバックアップや簡易バックアップのファイル名が長すぎる場合は、代わりに接尾辞~を使用します。~を付けても長すぎる場合は、ファイル名の最後の文字を~に置き換えます。

--verbose
処理について通常より詳しい情報を表示します。
-x num or --debug=num
patch自体の開発者向けの、内部デバッグフラグを設定します。
-Y pref or --basename-prefix=pref
バックアップファイル名をsimple方式で決定し(-V methodまたは--version-control methodを参照)、バックアップ名を生成するときにファイルのベース名の前へprefを付けます。たとえば、-Y .del/を指定すると、src/patch/util.cの簡易バックアップ名はsrc/patch/.del/util.cになります。
-z suffix or --suffix=suffix
バックアップファイル名をsimple方式で決定し(-V methodまたは--version-control methodを参照)、接尾辞にsuffixを使用します。たとえば、-z -を指定すると、src/patch/util.cのバックアップ名はsrc/patch/util.c-になります。
-Z or --set-utc
コンテキスト差分のヘッダーにあるタイムスタンプから、パッチ適用後のファイルの変更時刻とアクセス時刻を設定します。タイムスタンプに明記されていなければ、コンテキスト差分のヘッダーは協定世界時(UTC、しばしばGMTとも呼ばれます)を使用しているものとみなします。-Tまたは--set-timeも参照してください。

-Zまたは--set-utc、および-Tまたは--set-timeは通常、元のファイルの時刻がパッチのヘッダーに記された時刻と一致しない場合や、ファイルの内容がパッチに完全には一致しない場合、ファイルの時刻を設定しません。ただし、-fまたは--forceを指定すれば、一致するかどうかにかかわらず設定します。

diffの出力形式の制限により、これらのオプションでは、内容が変わっていないファイルの時刻を更新できません。また、これらを使用した場合は、パッチを適用したファイルに依存するファイルをすべて(たとえばmake cleanで)削除するべきです。そうすれば、後でmakeを実行したときに、変更されたファイルの時刻によって混乱することを避けられます。