web-dev-qa-db-de.com

Mein Diff enthält nachgestellte Leerzeichen - wie kann ich sie entfernen?

Ich habe versucht, eine PHP-Datei in TextWrangler mit Zeilenenden auf Unix, in NetBeans und in vim zu bearbeiten. Wenn ich das Diff in einem Patch speichere und dann versuche, es anzuwenden, werden Leerzeichenfehler ausgegeben. Wenn ich git diff Ich kann es sehen ^M am Ende meiner Zeilen, aber wenn ich diese in vim manuell entferne, heißt es, dass meine Patch-Datei beschädigt ist und der Patch dann überhaupt nicht angewendet wird.

Ich erstelle einen Patch mit dem folgenden Befehl:

git diff > patchname.patch

Und ich wende es an, indem ich eine saubere Version der zu patchenden Datei auschecke und tippe

git apply patchname.patch

Wie kann ich diesen Patch ohne Whitespace-Fehler erstellen? Ich habe bereits Patches erstellt und bin auf dieses Problem nie gestoßen.

36
beth

Sind Sie sicher, dass dies schwere Fehler sind? Standardmäßig warnt git vor Whitespace-Fehlern, akzeptiert sie jedoch weiterhin. Wenn es sich um schwerwiegende Fehler handelt, müssen Sie einige Einstellungen geändert haben. Du kannst den ... benutzen --whitespace= flag to git apply, um dies pro Aufruf zu steuern. Versuchen

git apply --whitespace=warn patchname.patch

Dadurch wird das Standardverhalten erzwungen, das warnen, aber akzeptieren soll. Sie können auch --whitespace=nowarn, um die Warnungen vollständig zu entfernen.

Die Konfigurationsvariable, die dies steuert, ist apply.whitespace.


Die hier aufgeführten Leerzeichenfehler sind keine Fehler in Ihrem Patch. Es ist ein Code-Stil, über den sich Git standardmäßig beschwert, wenn Patches angewendet werden. Bemerkenswerterweise mag es keinen nachgestellten Whitespace. Ähnlich git diff hebt Leerzeichenfehler hervor (wenn Sie auf einem Terminal ausgeben und die Farbe eingeschaltet ist). Das Standardverhalten ist, zu warnen, aber den Patch trotzdem zu akzeptieren, da nicht jedes Projekt in Bezug auf Leerzeichen fanatisch ist.

26
Lily Ballard

git apply --reject --whitespace=fix mychanges.path

28
zednight

Versuchen Sie es mit Patch -p1 <Dateiname.Patch

8
flash

die einzeilige Lösung lautet:

emacs <filename> -f delete-trailing-whitespace -f save-buffer -f kill-emacs

quelle: https://wiki.gnome.org/Projects/GnomeShell/Development/WorkingWithPatches

2
askalski

Ich denke, die Frage, wie man mit dem Leerzeichen umgeht, wurde angemessen beantwortet, aber Sie haben gefragt, woher es kommt. Du erwähntest ^M am Zeilenende: So zeigt Git Windows-Zeilenenden an. Vielleicht versuchen Sie es mit dos2unix in Ihren Quelldateien, bevor Sie Patches erstellen, oder verwenden Sie einen Editor, der die ursprünglichen Zeilenenden beibehält.

0
TRiG