Was bedeutet "Patch endet unerwartet in der Mitte der Zeile"?

14

Dies ist die Ausgabe meines Patch-Befehls:

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.

Der Befehl war

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

Der Patch wurde mit git erstellt:

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

Was patch unexpectedly ends in middle of linebedeutet und ist es ein Problem? Bezieht es sich auf Block 16 oder 17? Nach was kann ich in der Patch-Datei suchen, um herauszufinden, was dies verursacht?

Paul Biggar
quelle

Antworten:

11

Die Nachricht bezieht sich auf Hunk 16.

Diese GitHub-Diskussion hängt wahrscheinlich mit Ihrem Problem zusammen.

Es geht darum, dass Patch aufgrund von CRLF-Problemen (Wagenrücklauf, Zeilenvorschub) unerwartet in der Mitte von Zeilenmeldungen endet , wenn mit Patch git-generierte Diffs verwendet werden.

Um die Schlussfolgerung zu zitieren:

[..] Git kann sehr wählerisch in Bezug auf Zeilenenden sein. Bist du auf Windows oder nicht? In jedem Fall sollten Sie wahrscheinlich autocrlf in der Git-Konfiguration einstellen. Wenn Sie Windows verwenden, möchten Sie "true". Wenn Sie Mac oder Linux verwenden, sollten Sie "input" [..] verwenden.

Im Artikel Umgang mit Zeilenenden beschreibt GitHub die obige Aussage.

maxschlepzig
quelle
1
Es sollte angemerkt werden, dass der Fragesteller gefragt hat, ob dies schlecht ist - ein Ende in der Mitte einer Zeile ist kein Problem - nur eine Warnung.
Ross
3

Wenn Sie nicht verwenden git(in @ maxslepzigs Kommentar ging es um die Verwendung von Patch im Kontext von git), fügen Sie am Ende Ihrer Datei einen Zeilenumbruch hinzu. Ich habe das gemacht und patchmeinen Patch akzeptiert.

Avery Chan
quelle
2

Um zu dieser sehr alten Diskussion hinzuzufügen:

Das Problem, das zu der vom OP festgestellten Warnung führt, wird im Allgemeinen durch Probleme mit den Zeilenenden verursacht.

patch will einen Trailing Line Feed (LF), um das Ende der Datei zu bestimmen (und warnt vor einem vereinheitlichten Diff, das möglicherweise versehentlich abgeschnitten wurde)

  1. Hängen Sie den richtigen Zeilenumbruch an, ohne die Datei zum Bearbeiten zu öffnen (dies kann je nach den Einstellungen Ihres Editors dazu führen, dass Ihre Zeilenenden geändert oder nachgestellte Zeilen / Leerzeichen entfernt werden).

    echo -e "\n" >> YOURPATCHFILE

    Dadurch wird ein Zeilenvorschubzeichen an das Ende der Datei angehängt, ohne dass weitere Änderungen vorgenommen werden.

  2. Wenn Ihre Patch-Datei bereits seltsam ist oder Sie mehrere mögliche Korrekturen gleichzeitig durchführen möchten, können Sie viele Codierungsprobleme (zu ASCII) einschließlich der Zeilenenden (CR oder CRLF zu LF) beheben:

    dos2unix -k YOURPATCHFILE

    Möglicherweise müssen Sie die DOS2UNIX-Binärdatei über den Paketmanager Ihres Betriebssystems installieren. dh

    • Debian / Ubuntu-basiert: sudo apt install dos2unix
    • Fedora / RHEL / CentOS: sudo yum install dos2unix
    • MacOS (mit Brauen): brew install dos2unix
ChrisN
quelle