簡単なパッチ適用方法(逆検出)

簡単なパッチ適用方法(逆検出)

簡単なパッチを作成して適用して修正しようとしていますGradle関連のエラー

ファイル(/usr/bin/gradle)を作業ディレクトリにコピーして変更しました。次にパッチを作成します。

diff -u /usr/bin/gradle gradle > gradle.patch

それからそれを適用してみます。

sudo patch < gradle.patch
Reversed (or previously applied) patch detected!  Assume -R? [n]

とにかく続けると失敗します。ファイルを反転するパッチを作成しようとしましたが、この場合は「成功的に」適用されますが、何もしません。

結果のパッチは次のとおりです。

--- /usr/bin/gradle 2013-09-09 16:47:58.000000000 -0400
+++ gradle  2015-10-13 11:39:36.005269565 -0400
@@ -67,7 +67,8 @@

 CLASSPATH=$APP_HOME/lib/gradle-launcher-1.4.jar

-export JAVA_HOME=/usr/lib/jvm/default-java
+# commenting out as per (https://stackoverflow.com/a/22309017)
+# export JAVA_HOME=/usr/lib/jvm/default-java

 # Determine the Java command to use to start the JVM.
 if [ -n "$JAVA_HOME" ] ; then

パッチの上部にあるファイルパスを/usr/bin/gradleに編集しようとしましたが、役に立ちませんでした。

また、-p0を渡してみました。この場合、以下が提供されます。

Ignoring potentially dangerous file name /usr/bin/gradle
can't find file to patch at input line 3
Perhaps you used the wrong -p or --strip option?
The text leading up to this was:
--------------------------
|--- /usr/bin/gradle    2013-09-09 16:47:58.000000000 -0400
|+++ /usr/bin/gradle    2015-10-13 11:39:36.005269565 -0400
--------------------------
File to patch: /usr/bin/gradle
File /usr/bin/gradle is not a regular file -- refusing to patch
1 out of 1 hunk ignored -- saving rejects to file /usr/bin/gradle.rej

この場合、ファイルを指定しても失敗します。

簡単な作業のようですが、私が何を間違っているのでしょうか?

答え1

正しいファイルをパッチする必要があります。

呼び出す方法に応じて、リバースパッチを正しく想定して新しいファイルをパッチしようとします。

以前のバージョンのファイルを現在のディレクトリにコピーすると、パッチが適用されます。

テスト関連-p0:/usr/bin/gradleを変更する権限がありますか? /usr/binにファイルを生成する権限がありますか?

また、パッチするファイル名を取得するには他の規則があることに注意してください。

使用されるルールは、gpatch元のパッチおよびPOSIXパッチ標準とは異なります。

「一般ファイルではありません」というメッセージは専用ですgpatch。ファイルをリストします/usr/bin/gradle。ファイルが通常のファイルではない場合にのみメッセージが印刷されるため、何かが奇妙に見えます。

したがって、解決策は次のとおりです。

patch通常のファイルのみがパッチされますが、パッチするファイルはシンボリックリンクです。

現在のディレクトリに通常の(以前のバージョン)ファイルのコピーがある場合、パッチは期待どおりに機能します。

注:パッチするファイル名を取得する一般的な規則は、最も短い名前を見つけることです。一般的な命名規則は、次を使用することです。

file.orig

そして

file

関連情報