Ich versuche mit dem Befehl einen Patch zu erstellen
git diff sourcefile >/var/lib/laymab/overlay/category/ebuild/files/thepatch.patch
Wenn ich den Patch anwende, gibt es mir
$ patch -v
GNU patch 2.7.5
$ /usr/bin/patch -p1 </var/lib/laymab/overlay/category/ebuild/files/thepatch.patch
patching file sourcefile
Hunk #1 FAILED at 1 (different line endings).
Hunk #2 FAILED at 23 (different line endings).
Hunk #3 FAILED at 47 (different line endings).
Hunk #4 FAILED at 65 (different line endings).
Hunk #5 FAILED at 361 (different line endings).
5 out of 5 hunks FAILED -- saving rejects to file sourcefile.rej
Ich habe versucht, dos2unix sowohl auf die src-Datei als auch auf die Patch-Datei anzuwenden, aber die Meldung ist nicht verschwunden ...
UPD: --ignore-whitespace hilft auch nicht
PATCH COMMAND: patch -p1 -g0 -E --no-backup-if-mismatch --ignore-whitespace --dry-run -f < '/var/lib/layman/dotnet/dev-dotnet/slntools/files/remove-wix-project-from-sln-file-v2.patch'
=====================================================
checking file Main/SLNTools.sln
Hunk #1 FAILED at 14 (different line endings).
Hunk #2 FAILED at 49 (different line endings).
Hunk #3 FAILED at 69 (different line endings).
Hunk #4 FAILED at 102 (different line endings).
4 out of 4 hunks FAILED
UPD: fand einen sehr guten Artikel: /programming//a/4425433/1709408
sed -i.bak -e 's/\r$//g' something
. Ich glaube nicht, dass dos2unix so aggressiv mit gemischten Zeilenenden umgeht, wie Sie es möchten.Antworten:
Ich hatte das gleiche Problem mit dem
patch
Befehl, der mit MSYS2 unter Windows kommt. In meinem Fall hatten sowohl die Quelldatei als auch der Patch ein CRLF-Zeilenende, und das Konvertieren von beiden in LF funktionierte auch nicht. Was funktionierte, war das Folgende:patch
konvertiert die Zeilenenden aller gepatchten Dateien in LF, daher ist es notwendig, sie wieder in CRLF zu konvertieren.Anmerkung: Die von
patch
mir verwendete Version ist 2.7.5quelle
Normalerweise können Sie dies mit der folgenden
-l
Option umgehen :Dies ist eine Standardfunktion (siehe POSIX-Patch- Beschreibung).
OP änderte jedoch die Frage, um zu kommentieren, wie Zeilenende-Konvertierungen mit git core.autocrlf zwischen verschiedenen Betriebssystemen funktionieren , und fügte ein Beispiel hinzu, das andeutet , dass das Problem bei Dateien unter Windows auftritt (im Gegensatz zum Unix-Beispiel). Während
patch
versucht wird, Fehlanpassungen zwischen CRLF- und LF-Zeilenenden auszugleichen, wird davon ausgegangen, dass letztere verwendet werden. Wenn die Patch-Datei CRLF-Endungen hätte und die zu patchenden Dateien nicht, würde sie wie im folgenden Beispielprotokoll wiederhergestellt:Beim Überprüfen des Quellcodes in der
similar
Funktionpatch
behandelt GNU Whitespace als spaceund Tabmit einer speziellen Behandlung, die davon abhängt, ob die Zeilen einen nachgestellten LF haben. CR wird nicht erwähnt. Es beachtet zwarcheck_line_endings
, verwendet diese Informationen jedoch nur als Teil einer Nachricht, um die Diagnose einer Ablehnung zu erleichtern. Die nachfolgenden CRs in pget_line werden entfernt, sofern die--binary
Option nicht angegeben ist.GNU Patch hat keine Option, es anzuweisen, einen Patch mit LF-Endungen in CRLF umzuwandeln, um ihn auf Dateien anzuwenden, deren Zeilenenden CRLF sind. Um es in diesem Fall zuverlässig zu nutzen, haben Sie die Wahl
--binary
Option hinzu.quelle
Ich hatte ein ähnliches Problem mit Cygwin. In meinem Fall bestand die Korrektur darin,
-i
flag zu verwenden, anstatt aus dem stdin zu lesen.Folgendes ist mit einem anderen Zeilenendefehler fehlgeschlagen :
Aber das Folgende ist gelungen:
Ich bin mir der Ursache nicht sicher, lasse dies aber hier, falls jemand das gleiche Problem hat.
quelle