patch
を用いてマージする
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
patch
を用いてマージするpatch
を用いてマージする"へのコメント(無し)
patch
は,diff
で生成される比較された出力を受けとり, パッチをあてたバージョンを生成しながら,オリジナルファイルのコピーに差分 を適用します.patch
を用いることで,ファイルをすべて配布する代 わりに,変更したファイルの組だけを配布することが可能になります.取引先で は,変更したファイルのコピーを更新するためにpatch
を適用するこ とが可能になります.patch
は差分の書式を自動的に決定し,前後の ヘッダを飛ばし,パッチをあてるファイルを決定するためにヘッダを使用します. これで,取引先はpatch
に直接,変更部分のリストをメールのメッセー ジに含めることができます.
patch
は,後戻りするパッチのような一般的な問題を検出し警告を発 します.それで適用しなくてもよいパッチあてることを止めます.また,取引先 が適切な順序で差分を適用するのを確実にするため,patchlevel.h
ファ イルも管理することが可能です.
patch
は,標準入力から連続した差分を受け入れ,それは通常,パッ チをあてるファイルを指定するヘッダで分離されています.それは, diff
のhunk(see 節 1.1 Hunks)を一つずつ適用します.hunkが元ファイ ルに正確にマッチしない場合,patch
はできる限り発見的手法を用い てパッチをあてるファイルを見つけようとします.適切にマッチしている部分を 見つけることが不可能な場合,patch
はhunkを除外し,次のhunkに飛 びます.patch
は通常,hunk(が存在する場合はそれ)を `f.rej'に捨てながら,それぞれのファイルfを新しいバージョ ンで置換します.
patch
へのオプションの詳細は,See 節 15. patch
の呼び出し.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
patch
の入力書式の選択patch
の入力書式の選択"へのコメント(無し)
patch
は,パッチファイルで使用しているdiff
の書式を, その内容を調査して決定します.特定の複雑な前置テキストの一つが含まれてい るパッチファイルに対し,patch
がパッチファイルを特定の書式の差 分であると解釈するように,以下のオプションの一つを使用する必要があるかも しれません.以下でリストアップしている出力書式は,patch
が理解 可能なものだけです.
ed
スクリプト.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
存在しない入力ファイルが,patch
でサポートされているリビジョン コントロールシステムにある場合,patch
は通常,ユーザにリビジョ ンコントロールシステムからファイルを入手(チェックアウト)するかどうかを尋 ねます.パッチは現在,RCS,ClearCase,そしてSCCSをサポートして います.RCSとSCCSでは,patch
は入力ファイルが読み込み 専用で,デフォルトのバージョンがリビジョンコントロールシステムのものとマッ チするときにも質問してきます.
`-g num'や`--get=num'は,サポートされているリ ビジョンコントロールシステムのファイルへのアクセスに影響します. numが正の場合,patch
はユーザに尋ねることなくファイルを入 手します.ゼロの場合,patch
はファイルを入手するかどうかをユー ザに尋ねます.負の場合,patch
はファイルを入手する前にユーザに 尋ねます.numのデフォルト値は,PATCH_GET
環境変数が設定されて いる場合,それで与えられます.存在しない場合,patch
が POSIXに準拠している場合はデフォルト値はゼロで,そうでない場合は負に なります.See 節 10.12 patch
とPOSIXの標準.
リビジョンコントロールシステムの選択は,VERSION_CONTROL
環境変数に 影響しません(see 節 10.9 バックアップファイル名).
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
patch
は,パッチファイルに前置されるテキストを読み飛ばし,差分 を適用し,そして後置されるテキストを読み飛ばそうとします.このため,メー ルのメッセージを直接patch
に与えることが可能で,それはうまく動 作するでしょう.差分全体が空白の固定量と思われる場合,patch
は 自動的に字下げを無視します.前後の文を使用した差分のそれぞれの行に改行が 後置されている場合,patch
は自動的に改行を無視します.前後の文 を使用した差分が,Internet RFC 934によって,`-'で始まる行に`- 'を前置することでカプ セル化されている場合,patch
は自動的に入力のカプセル化を外しま す.
しかし,他の形式の不完全な入力では,ユーザが介入したりテストしたりする必 要があります.
10.3.1 空白が変更されているパッチを適用する When tabs and spaces don't match exactly. 10.3.2 リバースパッチを適用する Applying reversed patches correctly. 10.3.3 不正確なマッチを patch
が見つけるように手助けをするHelping patch
find close matches.10.3.4 patch
が行なうことの予測Predicting what patch
will do.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
メーラ,エディタ,またはその他のプログラムによって,スペースをタブまたは その反対に変更するものもあります.これがパッチファイルや入力ファイルに対 して生じている場合,ファイルは同じように見えますが,patch
はそ れらを適切にマッチさせることが不可能です.この問題が生じる場合,パッチファ イルの空ではない連続した空白が空ではない入力ファイルの連続した空白にマッ チするように,patch
の空白文字(例えば,スペースとタブ)の比較を 曖昧にさせる,`-l'や`--ignore-white-space'オプションを使用 してください.空白ではない文字は正確にマッチするはずです.周りの文のそれ ぞれの行は,入力ファイルの行にマッチするはずです.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
二番目のファイルの代わりに最初の新しいファイルでdiff
を実行する こともあります.これで"リバース"の差分が生成されます.そのようなパッチ を適用するために,patch
に`-R'や`--reverse'オプショ ンを与えてください.patch
はそれぞれのhunkの周りを,それを適用 する前に入れ換えようとします.除外されたものは入れ換えられた書式に出力さ れます.
パッチがリバースだとpatch
が分かることもよくあります.パッチファ イルの最初のhunkで失敗する場合,リバースすることで適用可能かどうかを判定 するために,patch
はhunkをリバースします.可能な場合, patch
は`-R'オプションを設定したいかどうかを尋ねます.不 可能な場合,patch
は通常通りパッチを適用し続けます.パッチが通 常の差分で,最初のコマンドの追加が常に成功するため(削除されているであろ う)最初のコマンドが追加されている場合,空文がどこかでマッチするので,こ の手法でリバースパッチを検出することは不可能です.しかし,ほとんどのパッ チは行を削除するのではなく追加したり変更したりしているので,ほとんどの通 常のリバース差分は削除で始まり,失敗するとpatch
はそれに注目し ます.
既に適用しているパッチを適用する場合,patch
はそれをリバースパッ チだと考え,パッチを逆に適用するように提案します.これは特長と言っても良 いでしょう.不注意にこうしてしまい,パッチを逆に適用したくない場合,その まま続けて"適用する"ために,この提案に`n'と答えてください -- ま たは,patch
処理を中止するためにC-cを入力してください.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
patch
が見つけるように手助けをするpatch
が見つけるように手助けをする"へのコメント(無し)
周りの文を使用した差分と,より少ない範囲の通常の差分に対して,パッチが記 述している行番号が正しくないときは,patch
は正しいものを検出す ることが可能で,パッチのhunkを適用する正しい場所を見つけようとします.最 初に見つかると,hunkで記述されている行番号に,以前にhunkに適用したオフセッ トを加えたり引いたりします.それが正しい場所ではない場合,hunkで与えられ る周りの文に一致する行の前後をpatch
はスキャンします.
最初にpatch
は周りの文のすべての行がマッチする場所を探します. そのような場所を見つけることができず,周りの文を使用している差分や一体化 した差分を読み込んでいて,最大のfuzzの要素が1以上に設定されている場合, 周りの文の最初と最後の行を無視しながら,patch
はもう一度スキャ ンします.それでも失敗し,最大のfuzzの要素が2以上に設定されている場合, 周りの文の最初の二行と最後の二行を無視しながらもう一度スキャンします.最 大のfuzzの要素がそれより大きい場合は,同様に続けていきます.
`-F lines'や`--fuzz=lines'オプションで,最大の fuzzの要素をlinesに設定します.このオプションは,周りの文を使用し ている差分や一体化した差分だけに適用されます.hunkを導入する場所を探して いる間,lines行まで無視します.より大きなfuzzの要素で,不完全なパッ チを作成する可能性が高くなることに注意してください.デフォルトのfuzzの値 は2です.周りの文を使用した差分の行数,通常は三行,以上に設定しても意味 はありません.
patch
がパッチのhunkを導入する場所を見つけることができない場合, hunkをリジェクトファイルに書き出します(リジェクトファイルの命名方法は, see 節 10.10 リジェクトされたファイル名).入力されるパッチの形式のまま,リジェクトされた周 りの文を用いた書式のhunkを書き出しても問題ありません.入力が通常または ed
の差分の場合,周りの文の多くは単にヌルになります.リジェクト ファイルのhunkの行数は,これらのパッチファイルとは異なります. patch
が失敗したファイルが属する適切な場所を,古いファイルでは なく新しいファイルで示しています.
`--verbose'オプションが与えられている場合,それぞれのhunkが完了す るとき,patch
はhunkが成功したか失敗したかを告げ,失敗した場合, hunkを適用すべき行だとpatch
が考える(新しいファイルの)行を報告 します.これが差分で指定されている行番号と異なる場合,そのオフセットを報 告します.単一の大きなオフセットは,patch
がhunkを間違った場所 に導入していることを示している可能性があります.疑わしい場合も, patch
は,マッチするようにfuzz要素を使用したかどうかを報告しま す.
patch
は,行番号がed
スクリプトでoffになっているかどう かを報告することはできませんが,変更や削除コマンドになっている通常の差分 での間違った行番号を検出することだけは可能です.差分に表示されている周り の文の行数(通常は3)以上のfuzz 要素を使用しているときの,周りの文を使用し た差分でも同じ問題があるかもしれません.この状況では,オリジナルとパッチ をあてる入力の間を変更することに意味があるかどうかを知るために,周りの文 を使用した差分を見るべきでしょう.エラー無く組み込まれると,パッチが動作 したことを見事に示していますが,保証はしていません.
空のファイルへのパッチは,存在しないファイルに適用され,その逆も真です. See 節 10.4 ファイルの作成と削除.
patch
は通常,たくさん推測する必要があっても,正しい結果を生成 します.しかし,結果はパッチが生成されたファイルのコピーに正確に適用され るときだけ保証されます.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
patch
が行なうことの予測patch
が行なうことの予測"へのコメント(無し)
patch
が複雑なまたは不完全な書式のパッチをどのように処理するか は,あらかじめ明確でないかもしれません.入力でpatch
が間違った ファイルを編集することが心配な場合,実際にファイルを変更することなく patch
がパッチを適用した結果を出力する,`--dry-run'オプ ションを使用することが可能です.patch
が期待したファイルを編集 するかどうかを調べるために,予行演習をすることで生成される診断結果を,検 査することが可能です.パッチが期待したものでない場合,パッチ(または patch
のその他のオプション)を編集して,もう一度予行演習すること が可能です.パッチの目的に満足したら,patch
を前回同様に呼び出 すことで適用することが可能で,このときは`--dry-run'オプションは用 いません.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
二つのディレクトリを比較しているとき,一方のディレクトリに存在しているファ イルがもう一方には無いこともあるかもしれません.diff
に `-N'や`--new-file'オプションを与える場合や, `/dev/null'という名前のファイルや空のファイル,そしてEpoch (1970-01-01 00:00:00 UTC)の日付のファイルで,古いファイルや新しいファイ ルを提供した場合,diff
はこのファイルの内容を追加したり削除した りします.そのようなパッチが与えられたとき,patch
は通常,新し いファイルを作成したり,古いファイルを削除したりします.しかし, POSIX(see 節 10.12 patch
とPOSIXの標準)に準拠するとき,patch
は古い ファイルを削除せず,空にして残します.`-E'や `--remove-empty-files'オプションで,パッチを適用後に空になる出力 ファイルを,パッチがファイルを削除するようには見えない場合でも patch
は削除します.
パッチが既存のファイルを作成するように見える場合,patch
はパッ チを適用する前に,確認のため尋ねてきます.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
patch
がファイルを更新するとき,通常ファイルの最終更新のタイム スタンプを現在の日時に設定します.ソフトウエア配布物の追跡に patch
を使用している場合,これでmake
は,パッチをあて たファイルが古いものだと間違って推定するはずです.例えば, `syntax.c'が`syntax.y'に依存していてpatch
が `syntax.c'を更新してから`syntax.y'を更新する場合, `syntax.y'が更新されているにもかかわらず,`syntax.c'はそれより 古いものになります.
`-Z'や`--set-utc'オプションで,patch
はパッチをあ てたファイルの編集時刻とアクセス時刻を,周りの文を使用した差分のヘッダで 与えられるタイムスタンプに設定します.周りの文を使用した差分のヘッダに, タイムゾーンが指定されていない場合,Coordinated Universal Time(GMT として知られていることが多いUTC)だと仮定します.
`-T'や`--set-time'オプションは,`-Z'や `--set-utc'のように動作しますが,周りの文を使用した差分のヘッダの タイムスタンプを,UTCの代わりにローカルタイムを使用していると仮定し ます.ローカルタイムを使用しているパッチは,他のタイムゾーンにいる人が簡 単に使用することが不可能で,ローカルなタイムスタンプは,ローカルな時計が 夏時間に調整されている間に戻ってしまうので,このオプションは推奨されませ ん.周りの文を使用した差分のヘッダがタイムゾーンを指定している場合,この オプションは,`-Z'や`--set-utc'と等価です.
patch
は通常,ファイルのオリジナルの最終更新のタイムスタンプが 差分のヘッダで与えられるタイムスタンプとマッチしない場合や,ファイルの内 容がパッチに正しくマッチしない場合,ファイルのタイムスタンプで設定されて いるものにすることを差し控えます.しかし,`-f'や`--force' オプションが設定されている場合,ファイルのタイムスタンプはおかまいなしに 設定されます.
現在のdiff
書式の制限のため,patch
で内容が変更されて いないファイルのタイムスタンプを更新することは不可能です.また,ファイル のタイムスタンプを現在の日時以外に設定する場合,後にmake
の呼び 出しで,パッチをあてたファイルのタイムスタンプで混乱しないように,パッチ をあてるファイルに依存するすべてのファイルも(例えば`make clean'で) 削除するべきです.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
パッチファイルは一つ以上のパッチが含まれている場合,そして,コマンドライ ンで入力ファイルを指定していない場合,patch
はそれぞれのファイ ルを個別のパッチファイルから来たもののように適用します.これは,それぞれ のパッチに対するパッチをあてるファイル名を決定し,ファイル名に対するそれ ぞれのパッチの前に前置されているテキストと,必要条件となるリビジョンレベ ルを調べるということを意味します(この話題の詳細は,see 節 11. パッチの作成と使用の助言).
パッチの前に前置されてるテキストからファイル名を直観で知るために, patch
は以下の規則を使用します.最初に,patch
は以下の ような対象となるファイル名の順序のあるリストを受けとります.
patch
は古いものと新しい もののファイル名をヘッダから受けとります.`-pnum'や `--strip=num'オプションに満たないスラッシュしかない場合,名 前は無視されます.`/dev/null'という名前も無視されます.
patch
がPOSIXに準拠している場 合,patch
は`Index:'行の名前を受けとります.
そして,patch
は以下のような対象となるファイルのリストからファ イル名を選択します.
patch
がRCS,ClearCase,そしてSCCS(see 節 10.2 リビジョンコントロール)を無視せず,RCS,ClearCase,またはSCCS以外の名前のファ イルが存在しない場合,patch
はRCS,ClearCase,または SCCSのマスターで最初に指名されたファイルを選択します.
patch
が POSIXに準拠していない,そしてパッチがファイルを作成しているように見 える場合,patch
はディレクトリの作成が最小になるように,要求さ れている最適な名前を選択します.
patch
はその名前を選択します.ファイル名の空ではない最適な(best)リストを決定するため, patch
は最初に,パス名の構成要素を最小にして,すべての名前を受 けとります.そして,最短のベース名にしてすべての名前を受けとります.そし て,すべての最短の名前を受けとります.最後に,残っている最初の名前を受け とります.
patch
がPOSIXに準拠しているかどうかを知るために, See 節 10.12 patch
とPOSIXの標準.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
`-d directory'や`--directory=directory'オプショ ンをpatch
に渡すと,ディレクトリdirectoryを,パッチファイ ル内のファイル名と,それ以外の(`-B'と`-o'のような)オプショ ンの引数として与えられているファイル名の両方を解読するカレントディレクト リにしにします.例えば,メールを読むプログラムで,`/usr/src/emacs' ディレクトリに,以下のようなパッチを含むメッセージから直接ファイルにパッ チをあてることが可能です.
| patch -d /usr/src/emacs |
パッチで与えられるファイル名にディレクトリが前置されてはいるものの,パッ チで与えられているディレクトリとは異なるディレクトリにファイルを保持した いときもあります.この状況では,ファイル名をnumber個切り取って設定 するために,`-pnumber'や`--strip=number'オプショ ンを使用することが可能です.切り取り数は,ファイル名の最初から切り取る, ディレクトリ名が間にはいっている,スラッシュの数をpatch
に伝え ます.一つ以上の隣接したスラッシュは,単一のスラッシュとして数えられます. デフォルトで,patch
はすべての前置したディレクトリを切捨て,ファ イルのベース名だけを残します.
例えば,パッチファイルのファイル名が`/gnu/src/emacs/etc/NEWS'だと仮 定します.`-p0'を使用すると,ファイル名は編集されずに全部与えられ, `-p1'では,`gnu/src/emacs/etc/NEWS'(前置されたスラッシュが無 い)が与えられ,`-p4'では`etc/NEWS'が与えられ,`-p'を 全く指定しなければ,`NEWS'が与えられます.
patch
はカレントディレクトリで,(スラッシュを切り捨てた後)それ ぞれのファイルを探し,`-d directory'を使用した場合はそのディ レクトリで探します.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
通常,パッチが正確にオリジナルの入力ファイルにマッチしない場合,その状況 では`patch -R' (see 節 10.3.2 リバースパッチを適用する)でパッチを元に戻す場合にオ リジナルデータが元に戻らないので,バックアップファイルを作成します.しか し,POSIXに準拠しているとき,patch
はデフォルトでバックアッ プファイルを作成しません.See 節 10.12 patch
とPOSIXの標準.
`-b'や`--backup'オプションで,patch
はパッチがオ リジナルの入力にマッチするかどうかに依存せずバックアップファイルを作成し ます.`--backup-if-mismatch'オプションでは,patch
はマッ チしないファイルに対してバックアップファイルを作成します.これは, POSIXに準拠していないときのデフォルトです. `--no-backup-if-mismatch'オプションで,patch
はマッチし ないファイルに対してもバックアップファイルを作成しません.これは POSIXに準拠しているときのデフォルトです.
バックアップファイルが存在しないとき,存在しないファイルを再生成させる場 所として,空の読み込み不可能なバックアップファイルが作成されます.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
通常,patch
は,オリジナルの入力ファイルを,その名前に拡張子 `.orig'や,`.orig'がバックアップファイルとして長過ぎる場合は `~'を後置したバックアップファイルに名前を変えます. (1) `-z backup-suffix'や`--suffix=backup-suffix'オ プションで,代わりのバックアップ用拡張子としてpatch
は backup-suffixを使用します.
また,SIMPLE_BACKUP_SUFFIX
環境変数でバックアップファイルの拡張子を 指定することも可能ですが,オプションが優先されます.
patch
では,GNU Emacsのように番号付のバックアップファイル を作成することも可能です.この手法を用いることで,それぞれのファイルに対 して単一のバックアップファイルを持つ代わりに,patch
でファイル にパッチを当てるたびに新しいバックアップファイルを作成します.例えば, `sink'という名前のファイルのバックアップは,連続的に, `sink.~1~',`sink.~2~',`sink.~3~'等になります.
`-V backup-style'や `--version-control=backup-style'オプションは,バックアップ ファイルを作成する手法を引数として受け入れます.patch
が PATCH_VERSION_CONTROL
環境変数を用いて作成するバックアップの形式を 制御することも可能で,`-V'オプションで優先します. PATCH_VERSION_CONTROL
が設定されていない場合,VERSION_CONTROL
環境変数が代わりに使用されます.これらのオプションや変数でバックアップファ イルの名前を制御することに注意してください.リビジョンコントロールシステ ムの選択には影響しません(see 節 10.2 リビジョンコントロール).
環境変数と`-V'オプションの引数の値は,GNU Emacsの version-control
変数に似ています(Emacsのバックアップバージョンの詳 細は,see 節 `Backup Names' in
patch
に,ディレクトリ名のような接頭辞を付けてバックアップファ イルを作成するるように伝えることも可能です.`-B prefix'や `--prefix=prefix'オプションで,prefixを前置したバック アップファイルを作成します.`-Y prefix'や `--basename-prefix=prefix'で,バックアップファイル名のファ イル名の構成要素の最後に,その代わりにprefixを前置します.例えば, `-Y ~'で`dir/file.c'のバックアップファイルは `dir/~file.c'になります.これらの接頭辞オプションの一つを使用した場 合,接尾子をベースにしたオプションは無視されます.
出力ファイルを`-o'オプションで指定する場合,そのファイルはバック アップされたものになりますが,入力ファイルではありません.
バックアップファイルの名前に影響するオプションは,バックアップを作成する かどうかに影響しません.例えば,`--no-backup-if-mismatch'オプショ ンを指定した場合はバックアップが作成されないので,このセクションで記述さ れているオプションは全く影響しません.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
リジェクトファイル(パッチに含まれているファイルで,patch
を適用 する場所を見つけられなかったファイル)に対する名前は通常,出力ファイルに `.rej'を後置して命名されます(または,`.rej'を用いた場合,バッ クアップファイル名が長過ぎる場合は`#'になります).
また,すべてのリジェクトされたファイル名を単一のファイルに書くように伝え ることも可能です.`-r reject-file'や `--reject-file=reject-file'オプションは,reject-file をリジェクトされたファイル名として使用します.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
patch
からのメッセージと質問patch
からのメッセージと質問"へのコメント(無し)
patch
は,特に入力のデコードで問題がある場合,様々なメッセージ を生成するはずです.処理方法が分からないような状況で,patch
は 通常,キーボードから更に情報を入力するように促します.キーボードからの入 力を促さないようにしたり,メッセージ内のファイル名を引用符で囲む方法に効 果を与えるために,メッセージを多くしたり少なくしたりするオプションもあり ます.
10.11.1 patch
の冗長な制御Controlling the verbosity of patch
.10.11.2 キーボード入力の抑制 Inhibiting keyboard input. 10.11.3 patch
が引用符で囲む形式Quoting file names in diagnostics.
patch
は,すべてのhunkが正しく適用された場合は0,hunkが適用でき なかった場合は1,そして,より重要な問題がある場合は2のステータスで終了し ます.ループでパッチの組を適用しているとき,部分的にパッチを当てたファイ ルにそれ以降適用しないように,終了ステータスを調査すべきです.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
patch
の冗長な制御patch
の冗長な制御"へのコメント(無し)
`--verbose'オプションを用いることで,patch
により多くの メッセージを生成させることが可能です.例えば,このオプションを与えたとき, メッセージ`Hmm...'は,patch
がパッチファイルのテキストを読 み込んで,テキストにパッチがあるかどうかの決定を試み,存在する場合はパッ チの種類が何かの決定を試みていることを示します.
`-s',`--quiet',または`--silent'オプションを使用す ることで,エラーが発生しない限り,patch
からの端末へのすべての 出力を抑制することが可能です.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
patch
が尋ねることを避ける方法は二つあります.`-f'や `--force'オプションは,行なっていることが分かっていることを仮定し ます.それでpatch
は以下のことを行ないます.
`-t'や`--batch'オプションは`-f'に似ていて,質問を抑 制しますが,仮定は多少異なります.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
patch
が引用符で囲む形式patch
が引用符で囲む形式"へのコメント(無し)
patch
が診断メッセージでファイル名を出力するとき,名前の書式は 何通りかになります.出力ファイル名に,句読点や改行のような特殊文字を含ん でいる場合でさえ,それを明確にするとき役に立つはずです. `--quoting-style=word'オプションで,名前の出力方法を制御し ます.wordは以下の一つです.
`--quoting-style'オプションのデフォルト値を,環境変数 QUOTING_STYLE
で指定することが可能です.この環境変数が設定されてい ない場合,デフォルト値は`shell'ですが,patch
の将来のバー ジョンでは,このデフォルト値は変更されるかもしれません.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
patch
とPOSIXの標準patch
とPOSIXの標準"へのコメント(無し)
`--posix'オプションを指定したり,POSIXLY_CORRECT
環境変数を 設定した場合,patch
は厳密にPOSIXの標準に従い,それは以下 の内容です.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
patch
と伝統的なpatch
patch
と伝統的なpatch
"へのコメント(無し)
現在のバージョンのGNU patch
は,通常POSIXの標準に従い ます.この一般的な規則へのわずかな例外は,See 節 10.12 patch
とPOSIXの標準.
残念ながらPOSIXでは,複数の重要な方法で,patch
の動作を再 定義しています.伝統的なpatch
やGNU patch
のバー ジョン2.1とそれ以前で内部処理する必要がある場合,以下の違いを知っておく べきです.
patch
では,`-p'のオペランドはオプションで, `-p'だけだと`-p0'と等価です.現在`-p'オプションはオ ペランドを要求し,`-p 0'は現在`-p0'と等価です.互換性を最 大にするため,`-p0'と`-p1'のようなオプションを使用してくだ さい.
また,伝統的なpatch
は,前置されるパスを取り除くとき,単純にス ラッシュを数えていきます.patch
は現在,パス名の構成要素を数え ます.すなわち,一つ以上の隣接するスラッシュは,現在単一のスラッシュとし て数えられます.互換性を最大にするため,ファイル名に`//'を含むパッ チを送るのは避けてください.
patch
は,デフォルトでバックアップが可能です.この動作 は現在,`-b'や`--backup'オプションで利用可能です.
反対に,POSIXのpatch
では,バックアップは一致しないものが あるときでも決して作成されません.GNU patch
では,この動作 は`--no-backup-if-mismatch'オプションや,POSIX準拠にすること で利用可能です.
伝統的なpatch
の`-b suffix'オプションは,GNU patch
の`-b -z suffix'オプションと等価です.
patch
は,パッチヘッダからパッチを当てるファイル名を直 観するために,複雑な(そしてドキュメントが不完全な)手法を使用していました. この手法は,POSIXに準拠しておらず,わずかにgotchaもあります.現在 patch
は,別の複雑な(しかしドキュメントがより良い),オプション でPOSIXに準拠している手法を使用してます.よりgotchaが少ないことを期 待しています.その二つの手法は,周りの文を使用した差分のヘッダがファイル 名で,`Index:'行が前置物を取り除いた後でもすべて識別できる場合,互 換性があります.ヘッダのファイル名が同じ数のスラッシュを含んでいる場合, 通常はパッチに互換性があります.
patch
はユーザに質問するとき,標準エラー出力に質問を送 り,端末となっている以下のリストの最初のファイルから答を探します.標準エ ラー出力,標準出力,`/dev/tty',そして標準入力です.現在 patch
は,標準出力に質問を送り,答を`/dev/tty'から受けとり ます.質問に対するデフォルトは,デフォルトの答えを使用するとき patch
が無限ループにならないように変更されています.
patch
は,悪いhunkの数を数えたステータス値や,本当に問 題があったとき1になるステータスで終了していました.現在patch
は, hunkに失敗したものがある場合は1のステータス,本当に問題があったときは2の ステータスで終了します.
patch
,伝統的なpatch
,または,POSIX準 拠のpatch
を実行している人に実行方法を説明するとき,以下のオプ ションに制限してください.以下のリストのスペースは重要で,オペランドは必 要です.
`-c' `-d dir' `-D define' `-e' `-l' `-n' `-N' `-o outfile' `-pnum' `-R' `-r rejectfile' |
[ << ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |