"패치가 줄 중간에서 예기치 않게 종료됩니다"는 무엇을 의미합니까?

"패치가 줄 중간에서 예기치 않게 종료됩니다"는 무엇을 의미합니까?

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

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을 말하는 건가요? 이 문제의 원인을 알아보려면 패치 파일에서 무엇을 찾을 수 있습니까?

답변1

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

이것GitHub 토론귀하의 문제와 관련이 있을 수 있습니다.

이것은 대략패치가 예기치 않게 줄 중간에서 종료됩니다.git 생성 diff를 패치와 함께 사용할 때 CRLF(캐리지 리턴, 줄 바꿈) 문제로 인해 발생하는 메시지입니다.

결론을 인용하자면:

[..] git은 줄 끝 부분에 대해 매우 까다롭습니다. 당신은 창문에 있습니까? 그럼에도 불구하고 git 구성에서 autocrlf를 설정해야 합니다. Windows에서는 "true"를 원하고, Mac이나 Linux에서는 "input"[..]을 사용해야 합니다.

기사에서줄 끝 처리GitHub는 위의 설명을 자세히 설명했습니다.

답변2

사용하지 않는 경우 git(@maxslepzig의 설명은 패치 컨텍스트에서 패치를 사용하는 것에 대한 것임 git) 파일 끝에 캐리지 리턴을 추가해 보십시오. 나는 그렇게 하여 patch패치를 받았습니다.

답변3

이 아주 오래된 토론에 추가하면 다음과 같습니다.

OP에서 지적한 경고를 일으키는 문제는 일반적으로 줄 끝 문제로 인해 발생합니다.

patch ~ 고 싶어요파일 끝을 확인하기 위한 후행 개행(LF)(그리고 균일한 diff가 의도하지 않게 잘릴 가능성에 대해 경고)

  1. 편집을 위해 파일을 열지 않고 올바른 줄 바꿈을 추가하려면(편집기 설정에 따라 줄 끝을 수정하거나 후행 줄/공백을 제거할 수 있음) 다음과 같이 간단하게 수행할 수 있습니다.

    echo -e "\n" >> YOURPATCHFILE

    그러면 다른 변경 사항 없이 파일 끝에 개행 문자가 추가됩니다.

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

    dos2unix -k YOURPATCHFILE

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

    • 데비안/우분투 기반:sudo apt install dos2unix
    • 페도라/RHEL/센트OS:sudo yum install dos2unix
    • MacOS(Brew 포함):brew install dos2unix

관련 정보