適用する必要があるパッチを受け取りましたが、ファイル名のために使用する-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>