web-dev-qa-db-de.com

Wie kann ich Patches zum Ignorieren von Zeilenumbrüchen installieren?

Ich versuche, einen Patch auf eine Datei mit Windows-Zeilenenden auf einem Linux-System anzuwenden, und es treten aufgrund der Zeilenumbrüche in der Datei Konflikte auf.

Die Option -l (Leerzeichen ignorieren) ignoriert die EOL-Zeichen nicht. Gibt es irgendwie Patch zu bekommen, um Windows-Stil Linienenden zu ignorieren?

22
James McMahon

Versuchen Sie es mit der Option --binary auf der Hilfeseite (Hervorhebung von mir).

--binär

Schreiben Sie alle Dateien im Binärmodus, mit Ausnahme der Standardausgabe und/dev/tty. Deaktivieren Sie beim Lesen die Heuristik zum Umwandeln von CRLF-Zeilenenden in LF-Zeilenenden. (Auf POSIX-konformen Systemen transformieren Lese- und Schreibvorgänge niemals Zeilenenden. Unter Windows transformieren Lese- und Schreibvorgänge standardmäßig Zeilenenden, und Patches sollten von diff --binary generiert werden, wenn Zeilenenden von Bedeutung sind.)

Ich verstehe das Obige nicht ganz, aber auf einem Linux-Computer funktionierte es, einen Unix-Patch auf eine DOS-Datei anzuwenden.

9
Jon

Hier ist ein Link http://www.chemie.fu-berlin.de/chemnet/use/info/diff/diff_2.html

Die -w' and-- ignore-all-space'-Optionen ignorieren den Unterschied, auch wenn eine Datei Leerzeichen> enthält, während die andere Datei keine hat. Leerzeichen sind Tabulator, Zeilenvorschub, vertikaler Tabulator,> Formularvorschub, Wagenrücklauf und Leerzeichen

Führen Sie diff wie folgt aus: diff -w file1.txt file2.txt

8

Ich hatte dieses Problem mit einem Diff, das manuell von der git diff-Konsolenausgabe in eine Patchdatei mit LFs kopiert und eingefügt wurde. Um diese Patch-Datei wieder zum Laufen zu bringen - um sie auf die tatsächlichen Dateien anzuwenden, die CRs und LFs verwendeten - mussten einige Dinge manuell ausgeführt werden:

  • finde alle Instanzen von "^ M" und lösche sie
  • füge CR zu allen Zeilen innerhalb der Hunks hinzu - aber nicht zu den Meta-Format-Zeilen (@@ etc)
  • fügen Sie in allen Zeilen innerhalb von Hunks, die leer waren, das fehlende Leerzeichen in der ersten Spalte hinzu

Die Syntaxhervorhebung für joe war dort sehr hilfreich, da sie Hunks richtig färbte, sobald ich sie reparierte.

1
Josip Rodin

Ich arbeite daran mit den folgenden Befehlen, um alle Dateien von Interesse in Unix-Zeilenenden zu konvertieren.

dos2unix `cat mixed-line-ending.patch | grep Index\: | sed -e 's/Index\://'`
dos2unix mixed-line-ending.patch
patch -p0 < mixed-line-ending.patch
1
CPrescott