Was bedeutet "1 Zeile fügt Leerzeichenfehler hinzu", wenn ein Patch angewendet wird?

104

Ich bearbeite einige Markdown-Dateien eines geklonten Remote-Repositorys und wollte das Erstellen und Anwenden von Patches von einem Zweig auf einen anderen testen. Jedes Mal, wenn ich Änderungen vornehme, erhalte ich jedoch die folgende Meldung git apply:

0001-b.patch:16: trailing whitespace.
warning: 1 line adds whitespace errors.

(Dies geschieht auf meinem Mac und ich weiß nicht, wo der ursprüngliche Code erstellt wurde.)

Was bedeutet die Warnmeldung und muss ich mich darum kümmern?

Yarin
quelle
1
Verwandte ("warum?"): Stackoverflow.com/questions/1583406/…
Mechanische Schnecke

Antworten:

125

Du musst dich nicht darum kümmern.

Die Warnung legt einen Standard für die Sauberkeit von Textdateien in Bezug auf Leerzeichen fest, wie es viele Programmierer gerne tun. Wie das Handbuch erklärt:

Was als Leerzeichenfehler betrachtet wird, wird durch die Konfiguration von core.whitespace gesteuert. Standardmäßig werden nachfolgende Leerzeichen (einschließlich Zeilen, die ausschließlich aus Leerzeichen bestehen) und ein Leerzeichen, auf das unmittelbar ein Tabulatorzeichen innerhalb des anfänglichen Einzugs der Zeile folgt, als Leerzeichenfehler betrachtet.

Standardmäßig gibt der Befehl Warnmeldungen aus, wendet jedoch den Patch an.

Der "Fehler" bedeutet also, dass durch die Änderung ein nachfolgendes Leerzeichen, eine Nur-Leerzeichen-Zeile oder ein Leerzeichen vor einer Registerkarte eingefügt wird. Abgesehen von dieser Tatsache ist an der Änderung nichts Falsches, und sie wird sauber und korrekt angewendet. Mit anderen Worten, wenn Sie sich nicht für das "falsche" Leerzeichen interessieren, können Sie die Warnung ignorieren oder deaktivieren git config apply.whitespace nowarn.

user4815162342
quelle
12
Schauen Sie sich das Commit mit an git show- wenn Ihr Git Farben macht, werden Sie sehen, dass das störende Leerzeichen in wütendem Rot erscheint. Außerdem git show --word-diffwird Ihnen nicht nur die Zeilenänderung angezeigt, sondern auch Einfügungen in der Mitte der Zeile. Dies sollte zeigen, ob der Patch wirklich nur ein Wort in der Mitte hinzufügt oder ob er auch ein nachfolgendes Leerzeichen hinzufügt.
user4815162342
12
Sie müssen nicht brauchen Pflege. Aber du solltest. Nachgestellte Leerzeichen sollten beseitigt werden.
Funroll
1
Außer das OP fügt kein neues nachfolgendes Leerzeichen hinzu, sondern ändert nur das, was bereits vorhanden ist.
user4815162342
4
Ich habe diese Requisite in einer ähnlichen Situation gesehen, als die Zeilenenden CRLFs im Windows-Stil anstelle von Unix-Endungen sind.
Ezequiel Muns
1
@Yarin Wenn Sie ein Wort in die Mitte einer Zeile einfügen und die Zeile bereits nachgestellte Leerzeichen enthält, kann dies die Warnung auslösen.
Warren Dew
4

Ein Fall, in dem Sie sich zu Recht darum kümmern könnten, ist, wenn Sie zwischen "alten" Whitespase-Fehlern (die Sie möglicherweise aus alten Gründen behalten möchten) und "neuen" Whitespace-Fehlern (die Sie vermeiden möchten) unterscheiden möchten.

Zu diesem Zweck wird Git 2.5+ (2. Quartal 2015) eine spezifischere Option für die Erkennung von Leerzeichen vorschlagen.

Siehe Commits 0e383e1 , 0ad782f und d55ef3e [26. Mai 2015] von Junio ​​C Hamano ( gitster) .
(Zusammengeführt von Junio in Commit 709cd91 , 11. Juni 2015)

diff.c: --ws-error-highlight=<kind>Option

Traditionell haben wir uns nur um Leerzeichenbrüche gekümmert, die in neuen Linien eingeführt wurden.
Einige Leute möchten auch Leerzeichen auf alten Linien malen. Wenn sie in einer neuen Zeile einen Leerzeichenbruch sehen, können sie dieselbe Art von Leerzeichenbruch in der entsprechenden alten Zeile erkennen und möchten sagen: "Ah, diese Fehler sind vorhanden, aber sie wurden vom Original geerbt. Berühren wir sie also nicht jetzt."

Führen Sie --ws-error-highlight=<kind>Option, die sie passieren eine durch Kommata getrennte Liste von können old, newund contextfestlegen , welche Linien zu markieren Leerzeichen Fehler auf.

Die Dokumentation enthält jetzt :

--ws-error-highlight=<kind>

Markieren Sie Leerzeichenfehler in Zeilen, die <kind>in der von angegebenen Farbe angegeben sind color.diff.whitespace.
<kind>ist eine durch Kommata getrennte Liste von old, new, context.
Wenn diese Option nicht angegeben ist, werden nur Leerzeichenfehler in newZeilen hervorgehoben.

ZB werden --ws-error-highlight=new,oldLeerzeichenfehler sowohl in gelöschten als auch in hinzugefügten Zeilen hervorgehoben.
allkann als Abkürzung für verwendet werden old,new,context.

Zum Beispiel hatte das alte Commit einen Whitespace-Fehler ( bbb), aber Sie können sich nur auf die neuen Fehler konzentrieren (am Ende von still bbbund ccc):

alte und neue Leerzeichenfehler

(Test danach durchgeführt t/t4015-diff-whitespace.sh)


Mit Git 2.26 (Q1 2020) diff-*achtet die Sanitärfamilie der Unterbefehle nun auf die diff.wsErrorHighlightKonfiguration, die zuvor ignoriert wurde. Dadurch kann " git add -p" auch dem Endbenutzer die Leerzeichenprobleme anzeigen.

Siehe Commit da80635 (31. Januar 2020) von Jeff King ( peff) .
(Zusammengeführt von Junio ​​C Hamano - gitster- in Commit df04a31 , 14. Februar 2020)

diff: Verschieben Sie diff.wsErrorHighlight in die "Grundkonfiguration"

Unterzeichnet von: Jeff King

Wir analysieren diff.wsErrorHighlight in git_diff_ui_config(), was bedeutet, dass es nicht für Installationsbefehle wirksam wird, sondern nur für Porzellane wie sich git diffselbst.
Dies ist leicht ärgerlich, da Skripte wie add--interactive, die einen für den Benutzer sichtbaren Unterschied mit Farbe erzeugen, die Option nicht respektieren .

Wir könnten diesem Skript beibringen, die Konfiguration zu analysieren und sie an --ws-error-highlightdie Diff-Installation weiterzuleiten . Aber es gibt eine einfachere Lösung.

Es sollte für Installateure einigermaßen sicher sein, diese Option zu respektieren, da sie nur dann aktiviert wird, wenn die Farbe anderweitig aktiviert ist. Und jeder, der kolorierte Ausgaben analysiert, muss sich bereits mit der Tatsache befassen, dass color.diff.*sich die genaue Ausgabe ändern kann, die er sieht. Diese Optionen waren Teil git_diff_basic_config()seit ihrer Einführung in 9a1805a872 (fügen Sie einen "grundlegenden" Diff-Konfigurations-Rückruf hinzu, 2008-01-04, Git v1.5.4-rc3).

Wir können es also einfach in die "grundlegende" Konfiguration verschieben, die add--interactivezusammen mit jedem anderen Skript im selben Boot ein sehr geringes Risiko für die Verletzung von Installationsbenutzern behebt .

VonC
quelle
-2

Weil die Linie mit TABistead von beginnt SPACE. Gehen Sie zur Patch-Datei und ersetzen Sie sie TABdurch SPACE. ZB auf vim on line + vom Patch-Dateityp x, um Leerzeichen zu entfernen und nicht das Zeichen + zu entfernen und Leerzeichen (STRG) auf eqiv in Originalgröße einzufügen.

Marian
quelle
1
-1 Glaubst du wirklich, Git würde sich über Einrückungen im Linus-Stil beschweren? Die einzig legitime Verwendung von Tab, falls vorhanden, ist genau der Zeilenanfang.
user2394284