10.5 パッチ適用済みファイルのタイムスタンプの更新
patchはファイルを更新すると、通常は最終更新時刻を現在時刻に設定します。patchでソフトウェア配布物を追跡している場合、このためにmakeがパッチ適用済みファイルを古いと誤認することがあります。たとえばsyntax.cがsyntax.yに依存し、patchがsyntax.c、次にsyntax.yを更新すると、実際の内容は最新でもsyntax.cは通常、syntax.yより古いと見なされます。
--set-utc(-Z)オプションを指定すると、patchはパッチ適用済みファイルの更新時刻とアクセス時刻を、コンテキスト diff のヘッダーのタイムスタンプに設定します。ヘッダーにタイムゾーンの指定がなければ、協定世界時(UTC、GMT とも呼ばれます)を使うものと見なします。
--set-time(-T)オプションは-Zまたは--set-utcと同様ですが、ヘッダーのタイムスタンプを UTC ではなくローカル時刻と見なします。他のタイムゾーンの人が使いにくく、夏時間の調整で時計を戻す際にローカル時刻が曖昧になるため、このオプションは推奨しません。ヘッダーにタイムゾーン指定があれば、--set-utc(-Z)と同等です。
元ファイルの最終更新時刻が diff ヘッダーの時刻と一致しない場合、または内容がパッチと完全には一致しない場合、patchは通常タイムスタンプを設定しません。ただし--force(-f)オプションを指定すると、無条件に設定します。
現在のdiff形式の制限により、patchは内容の変わらないファイルの時刻を更新できません。また、現在時刻以外の値を設定する場合は、パッチ適用済みファイルに依存する全ファイルも(たとえば ‘make
clean’ で)削除すべきです。そうすれば、後のmakeの起動時に、パッチ適用済みファイルの時刻による混乱を防げます。