간단한 패치를 만들어 적용해서 고쳐보려고 합니다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