it-swarm-ko.tech

'패치가 줄 중간에서 예기치 않게 끝납니다'는 무슨 뜻입니까?

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

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을 의미합니까? 이 문제의 원인을 파악하기 위해 패치 파일에서 무엇을 찾을 수 있습니까?

14
Paul Biggar

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

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

Git 생성 diff가 patch와 함께 사용될 때 CRLF (carriage-return, linefeed) 문제로 인해 patch가 예기치 않게 줄 중간에서 끝납니다 메시지입니다.

결론을 인용하려면 :

[..] git은 라인 엔딩에 대해 매우 까다로울 수 있습니다. 당신은 창문에 있습니까? 어쨌든 git config에서 autocrlf를 설정해야 할 것입니다. Windows를 사용하는 경우 "true"를 원하고, Mac 또는 linux를 사용하는 경우 "input"[..]을 사용해야합니다.

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

11
maxschlepzig

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

3
Avery Chan

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

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

patchwants 파일의 끝을 확인하기위한 후행 줄 바꿈 (LF) (그리고 실수로 잘 렸을 수있는 통합 차이점에 대해 경고)

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

    echo -e "\n" >> YOURPATCHFILE

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

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

    dos2unix -k YOURPATCHFILE

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

    • Debian/Ubuntu 기반 : Sudo apt install dos2unix
    • Fedora/RHEL/CentOS : Sudo yum install dos2unix
    • MacOS (brew 포함) : brew install dos2unix
2
ChrisN