Що означає "виправлення несподівано закінчується посередині лінії"?


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

Повідомлення стосується Хенка 16.

Ця дискусія на GitHub , ймовірно, пов'язана з вашою проблемою.

Йдеться про те, що патч несподівано закінчується в середині рядкових повідомлень через проблеми CRLF (carriage-return, linefeed), коли git, що генерується diff, використовується з патчем.

Щоб процитувати висновок:

[..] git може бути дуже вибагливим щодо закінчень рядків. Ви на вікнах чи ні? У будь-якому випадку вам, мабуть, слід встановити autocrlf в git config. Якщо ви знаходитесь у Windows, ви хочете "true", якщо ви перебуваєте на mac чи linux, слід використовувати "input" [..]

У статті Робота з закінченнями рядків GitHub детально описує вищезазначене твердження.


1
Зазначимо, запитуючий запитав це погано - закінчення посеред рядка не є проблемою - лише попередженням.
Росс

3

Якщо ви не використовуєте git(коментар @ maxslepzig стосувався використання патчу в контексті git), спробуйте додати повернення перевезення в кінці файлу. Я це зробив і patchприйняв свій пластир.


2

Щоб додати до цієї дуже старої дискусії:

Проблема, що призводить до попередження, зазначеного в ОП, зазвичай викликається проблемами із закінченнями рядків.

patch бажає подавати лінію каналу (LF), щоб визначити кінець файлу (і попереджає про уніфікований розріз, який, можливо, був випадково врізаний)

  1. Додайте належну передачу рядків, не відкриваючи файл для редагування (що може змінювати закінчення рядків чи смугу проміжних ліній / пробілів залежно від налаштувань редактора), ви можете зробити щось просте, наприклад:

    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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.