'패치가 갑자기 중간 줄에서 끝나는 것'은 무엇을 의미합니까?


14

이것은 내 패치 명령의 출력입니다.

Hunk #11 merged at 4184,4190.
Hunk #12 merged at 4444.
Hunk #13 merged at 4944.
Hunk #14 NOT MERGED at 5106-5116.
Hunk #15 merged at 5290.
Hunk #16 merged at 5448.
patch unexpectedly ends in middle of line
Hunk #17 merged at 5608,5611.

명령은

patch -d ~/SOME_DIR -p1 --merge --verbose -u

패치는 git을 사용하여 제작되었습니다 :

git --git-dir ~/SOME_DIR/.git diff -U8 bb1ee538982957b421a4c0e78f30428e73c9a072 HEAD -- malloc.c

무엇을 patch unexpectedly ends in middle of line의미하며 문제입니까? 덩어리 16 또는 17을 가리 킵니까? 이 문제의 원인을 파악하기 위해 패치 파일에서 무엇을 찾을 수 있습니까?

답변:


11

이 메시지는 Hunk 16을 나타냅니다.

GitHub 토론 은 아마도 귀하의 문제와 관련이 있습니다.

그것은 관한 예기치 않게 패치 라인의 중간에 종료 자식 발생하는 차이점이 패치를 사용하는 경우 때문에 CRLF (캐리지 리턴, 라인 피드) 문제의 메시지.

결론을 인용하려면 :

[..] git은 줄 끝에서 매우 까다로울 수 있습니다. 창문에 있습니까? 어쨌든 git config에서 autocrlf를 설정해야합니다. 당신이 윈도우에 있다면, 당신은 "true"를 원하고, 당신이 맥이나 리눅스에 있다면, "input"[..]

줄 끝으로 다루기 기사에서 GitHub는 위의 내용을 자세히 설명합니다.


1
주목해야 할 것은, 질문자는 이것이 나쁘다는 것입니다. 줄 중간에 끝나는 것은 문제가 아니라 경고 일뿐입니다.
Ross

3

git(@maxslepzig의 의견은의 맥락에서 패치를 사용하는 것에 관한 것입니다)을 사용 하지 않는 경우 git파일 끝에 캐리지 리턴을 추가하십시오. 나는 그것을하고 patch내 패치를 수락했습니다.


2

이 오래된 토론에 추가하려면 :

OP가 언급 한 경고로 이어지는 문제는 일반적으로 줄 끝 문제로 인해 발생합니다.

patch 파일의 끝을 결정하기 위해 후행 줄 바꿈 (LF)을 원합니다 (실수로 잘릴 수있는 통합 된 diff를 경고합니다)

  1. 편집을 위해 파일을 열지 않고 적절한 줄 바꿈을 추가하십시오 (편집기 설정에 따라 줄 끝을 수정하거나 후행 줄 / 공백을 제거 할 수 있음).

    echo -e "\n" >> YOURPATCHFILE

    이렇게하면 다른 변경없이 파일 끝에 줄 바꿈 문자가 추가됩니다.

  2. 패치 파일이 이미 이상하거나 한 번에 여러 가지 수정을 수행하려는 경우 줄 끝 (CR 또는 CRLF에서 LF)을 포함하여 인코딩 (아스키)에 대한 많은 문제를 해결할 수 있습니다.

    dos2unix -k YOURPATCHFILE

    OS의 패키지 관리자에서 dos2unix 바이너리를 설치해야 할 수도 있습니다. 즉

    • 데비안 / 우분투 기반 : sudo apt install dos2unix
    • 페도라 / RHEL / CentOS : sudo yum install dos2unix
    • MacOS (brew 포함) : brew install dos2unix
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.