'แพทช์สิ้นสุดโดยไม่คาดหมายในกลางบรรทัด' หมายความว่าอะไร


14

นี่คือผลลัพธ์ของคำสั่ง patch ของฉัน:

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-dir ~/SOME_DIR/.git diff -U8 bb1ee538982957b421a4c0e78f30428e73c9a072 HEAD -- malloc.c

อะไรpatch unexpectedly ends in middle of lineเฉลี่ยและมันเป็นปัญหาหรือไม่ มันหมายถึงก้อนใหญ่ 16 หรือ 17 หรือไม่? ฉันจะค้นหาอะไรในไฟล์แพทช์เพื่อหาสาเหตุที่ทำให้เกิดปัญหานี้

คำตอบ:


11

ข้อความอ้างอิงถึง Hunk 16

นี้การอภิปราย GitHubอาจจะเป็นเรื่องที่เกี่ยวข้องกับปัญหาของคุณ

มันเป็นเรื่องเกี่ยวกับโปรแกรมปะแก้จบโดยไม่คาดคิดในกลางข้อความบรรทัดเนื่องจากปัญหา CRLF (carriage-return, linefeed) เมื่อใช้ diff git ที่สร้างขึ้นกับโปรแกรมแก้ไข

เพื่ออ้างข้อสรุป:

[.. ] คอมไพล์ได้อย่างพิถีพิถันมากเกี่ยวกับการสิ้นสุดบรรทัด คุณอยู่บน windows หรือไม่ คุณควรตั้งค่า autocrlf ในการกำหนดค่า git หากคุณอยู่บน windows คุณต้องการ "true" หากคุณใช้ mac หรือ linux คุณควรใช้ "input" [.. ]

ในบทความการจัดการกับการสิ้นสุดบรรทัด GitHub ให้รายละเอียดคำสั่งด้านบน


1
ควรสังเกตผู้ถามถามว่าเรื่องนี้ไม่ดีการสิ้นสุดตรงกลางของบรรทัดไม่ใช่ปัญหา - เป็นเพียงคำเตือน
Ross

3

หากคุณไม่ได้ใช้งานgit(ความคิดเห็นของ @ maxslepzig เกี่ยวกับการใช้โปรแกรมปะแก้ในบริบทของgit) ให้ลองเพิ่ม carriage return ที่ท้ายไฟล์ของคุณ ฉันทำอย่างนั้นและpatchยอมรับแพทช์ของฉัน


2

หากต้องการเพิ่มการสนทนาที่เก่ามากนี้:

ปัญหาที่นำไปสู่คำเตือนที่ OP ระบุไว้นั้นเกิดจากปัญหาเกี่ยวกับการสิ้นสุดบรรทัด

patch ต้องการ trailing line feed (LF) เพื่อกำหนดจุดสิ้นสุดของไฟล์ (และเตือนถึงส่วนต่างที่รวมที่อาจถูกตัดทอนโดยไม่ได้ตั้งใจ)

  1. ผนวก linefeed ที่เหมาะสมโดยไม่ต้องเปิดไฟล์เพื่อแก้ไข (ซึ่งอาจแก้ไขการสิ้นสุดบรรทัดของคุณหรือตัดเส้นบรรทัด / ช่องว่างต่อท้ายขึ้นอยู่กับการตั้งค่าโปรแกรมแก้ไข) คุณสามารถทำสิ่งที่ง่าย ๆ เช่น:

    echo -e "\n" >> YOURPATCHFILE

    ตัวอักษรนี้จะต่อท้ายบรรทัดของไฟล์โดยไม่ทำการเปลี่ยนแปลงใด ๆ

  2. หากไฟล์แพตช์ของคุณแปลกไปแล้วหรือคุณต้องการผ่านการแก้ไขหลายอย่างพร้อมกันคุณสามารถแก้ไขปัญหามากมายด้วยการเข้ารหัส (ไปยัง ascii) รวมถึงการสิ้นสุดบรรทัด (CR หรือ CRLF ถึง LF):

    dos2unix -k YOURPATCHFILE

    คุณอาจต้องติดตั้งไบนารี dos2unix จากตัวจัดการแพ็คเกจของระบบปฏิบัติการของคุณ กล่าวคือ

    • ใช้ Debian / Ubuntu: sudo apt install dos2unix
    • Fedora / RHEL / CentOS: sudo yum install dos2unix
    • MacOS (พร้อมชง): brew install dos2unix
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.