.\" -*- nroff -*- .\" $FreeBSD$ .rn '' }` '\" $Header: /home/ncvs/doc/ja_JP.eucJP/man/man1/patch.1,v 1.16 2004-08-03 12:44:42 metal Exp $ '\" %FreeBSD: src/gnu/usr.bin/patch/patch.1,v 1.14 2004/03/18 20:36:14 dannyboy Exp % '\" '\" $Log: not supported by cvs2svn $ '\" Revision 2.0.1.2 88/06/22 20:47:18 lwall '\" patch12: now avoids Bell System Logo '\" '\" Revision 2.0.1.1 88/06/03 15:12:51 lwall '\" patch10: -B switch was contributed. '\" '\" Revision 2.0 86/09/17 15:39:09 lwall '\" Baseline for netwide release. '\" '\" Revision 1.4 86/08/01 19:23:22 lwall '\" Documented -v, -p, -F. '\" Added notes to patch senders. '\" '\" Revision 1.3 85/03/26 15:11:06 lwall '\" Frozen. '\" '\" Revision 1.2.1.4 85/03/12 16:14:27 lwall '\" Documented -p. '\" '\" Revision 1.2.1.3 85/03/12 16:09:41 lwall '\" Documented -D. '\" '\" Revision 1.2.1.2 84/12/05 11:06:55 lwall '\" Added -l switch, and noted bistability bug. '\" '\" Revision 1.2.1.1 84/12/04 17:23:39 lwall '\" Branch for sdcrdcf changes. '\" '\" Revision 1.2 84/12/04 17:22:02 lwall '\" Baseline version. '\" .de Sh .br .ne 5 .PP \fB\\$1\fR .PP .. .de Sp .if t .sp .5v .if n .sp .. '\" '\" Set up \*(-- to give an unbreakable dash; '\" string Tr holds user defined translation string. '\" Bell System Logo is used as a dummy character. '\" .if !d Tr .ds Tr .ie n \{\ .tr \(*W-\*(Tr .ds -- \(*W- .if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch .if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch .ds L" "" .ds R" "" .ds L' ' .ds R' ' 'br \} .el \{\ .ds -- \(em\| .tr \*(Tr .ds L" `` .ds R" '' .ds L' ` .ds R' ' 'br\} .TH PATCH 1 LOCAL .SH 名称 patch - diff ファイルをオリジナルのファイルに適用する .SH 書式 .B patch [options] [origfile [patchfile]] [+ [options] [origfile]]... .sp ですが、たいていは以下のようにします。 .sp .B patch .br および多くの貢献者の方々。 .SH 環境変数 .TP .B TMPDIR テンポラリファイルを置くディレクトリ。デフォルトでは /tmp .TP .B SIMPLE_BACKUP_SUFFIX バックアップファイルに付ける拡張子を指定します。デフォルトでは、 \*(L".orig\*(R" もしくは \*(L"~\*(R"。 .TP .B VERSION_CONTROL 数字付きバックアップファイルが作成される際に選択します。 .SH 関連ファイル $TMPDIR/patch* .SH 関連項目 diff(1) .SH パッチ作成者への注意 パッチを作って送付しようとする際に留意すべき点がいくつかあります。 第 1 に、patchlevel.h というファイルを管理することで皆は大変幸せに なれます。作成したパッチファイルの最初の差分はこの patchlevel.h に パッチをあて、パッチレベルをインクリメントします。 パッチの中に Prereq: 行を入れておけば、 順番通りにパッチを適用しない限り警告が出ます。 第 2 に、context diff ヘッダか Index: 行で正しくファイル名を指定している ことを確認して下さい。 サブディレクトリにあるファイルにパッチをあてようとする場合は、 必要に応じて .B \-p オプションを指定するよう、ユーザに伝えて下さい。 第 3 に、空のファイルと新規ファイルを比較する差分を送付することで、 新しいファイルを生成することができます。 これは、ターゲットディレクトリにその新ファイルがまだ存在しない場合にのみ 有効です。 第 4 に、リバースパッチを送付しないように気を付けて下さい。 そのパッチは適用済なのかと皆が混乱します。 第 5 に、例えば 582 個の差分をたったひとつのファイルに突っ込んで ハイサヨナラとすることもできることはできますが、 何か発狂しそうになったときに備えて、 関係あるパッチをいくつかの独立したファイルにまとめあげるほうが おそらく賢明でしょう。 .SH 診断 ここに列挙しきれないほどたくさんありますが、一般に .I patch がパッチファイルを解釈できないことを示しています。 .PP メッセージ \*(L"Hmm...\*(R" は、 パッチファイル中に処理できないテキストが存在していること、 そして .I patch はそのテキスト中にパッチがあるかどうか、もし存在すれば どういう形式のパッチであるかを推測しようとしていることを 示しています。 .PP ひとつでもリジェクトファイルが作成されれば、 .I patch は 0 でない終了ステータスで終了します。 いくつものパッチを繰り返し適用する場合は、 この終了ステータスをチェックし、 パッチが部分的にしか適用されていないファイルに対して さらなるパッチをあてないようにすべきです。 .SH 警告 .I patch は .I ed スクリプト形式では行番号のズレを示せません。 また normal diff 形式でも、行番号の誤りを指摘できるのは \*(L"change\*(R" コマンドや \*(L"delete\*(R" コマンドが現れる場合だけです。 context diff 形式で曖昧度 3 を指定した場合も同様の問題があります。 適切な対話インタフェースが追加されるまでは、 こういう場合は context diff を見比べて修正が意味的に正しいかどうか 確認すべきでしょう。 もちろん、エラーなくコンパイルできれば、 パッチはうまく適用されたという小さなサインにはなりますが、 必ずしもいつもそうだというわけではありません。 .PP たとえ多くの類推を行わなくてはならない場合でも、 .I patch は通常、正しい結果を生成します。 しかし、結果が正しいと保証できるのは、 パッチを作成したのと正確に同じバージョンのファイルに対して パッチを適用した場合だけです。 .SH バグ 多めの \&deviant オフセットと入れ換えコードにより、 部分的なマッチングに関して更に賢くできますが、 そのためにはパスを追加する必要がありそうです。 .PP コードが複製されている場合(例えば #ifdef OLDCODE ... #else ... #endif に よって)、 .I patch は両者にパッチをあてることができません。 そしてそこでパッチコマンドがうまくいった場合、 そのパッチはおそらく誤って適用されており、 おまけに「成功しました」と報告してきます。 .PP 既に適用済のパッチをあてると、 .I patch はそれをリバースパッチと考え、適用したパッチを外すかどうか尋ねてきます。 これも特徴の一つと解釈可能でしょう。 .rn }` ''