古いディレクトリと新しいディレクトリに異なる数のサブディレクトリが含まれている場合は、patch -pオプションを使用してください。

古いディレクトリと新しいディレクトリに異なる数のサブディレクトリが含まれている場合は、patch -pオプションを使用してください。

適用する必要があるパッチを受け取りましたが、ファイル名のために使用する-pオプションを予測するのは困難です。

--- /home/user/foo/bar/baz.c
+++ /data/myproj/project/version/foo/bar/baz.c

foo/bar/baz.cを含むディレクトリに適用しましたが、どのパッチ番号を使用するのかわかりません。-p4失敗します。 2行目では、これが私が期待していたものです。p2また失敗しますが、それが最初の行で期待していたものです。

どちらを使うべきですか?それとも+++と---の先行ディレクトリの数が等しい場合にのみパッチを適用する必要がありますか?

答え1

それとも+++と---の主要なディレクトリ数が等しい場合にのみパッチを適用する必要がありますか?

はい、man patch次のように言及しました。

   If the recipient is supposed to use the -pN option, do not send  output
   that looks like this:

          diff -Naur v2.0.29/prog/README prog/README
          --- v2.0.29/prog/README   Mon Mar 10 15:13:12 1997
          +++ prog/README   Mon Mar 17 14:58:22 1997

   because  the two file names have different numbers of slashes, and dif‐
   ferent versions of patch interpret  the  file  names  differently.   To
   avoid confusion, send output that looks like this instead:

          diff -Naur v2.0.29/prog/README v2.0.30/prog/README
          --- v2.0.29/prog/README   Mon Mar 10 15:13:12 1997
          +++ v2.0.30/prog/README   Mon Mar 17 14:58:22 1997

ここでできることは、パッチを正規化し、次のように適用することです。

sed 's,--- /home/user/foo/,--- /data/myproj/project/version/foo/,' orig.patch | patch <other_patch_options>

関連情報