Sunday, 17 September 2017

Diff Thinks Files Are Binary Options


1.7 Binärdateien und erzwungene Textvergleiche Wenn diff denkt, dass eine der beiden Dateien, die es vergleicht, binär ist (eine Nicht-Textdatei), behandelt sie normalerweise dieses Paar von Dateien, als ob das zusammengesetzte Ausgabeformat ausgewählt worden wäre (siehe Kurz) , Und berichtet nur, dass die Binärdateien anders sind. Dies liegt daran, dass zeilenweise Vergleiche in der Regel nicht sinnvoll für Binärdateien sind. Das gilt nicht als Mühe, auch wenn die daraus resultierende Ausgabe nicht alle Unterschiede erfasst. Diff bestimmt, ob eine Datei Text oder Binär ist, indem man die ersten Bytes in der Datei überprüft, ist die genaue Anzahl der Bytes systemabhängig, aber es ist typischerweise mehrere tausend. Wenn jedes Byte in diesem Teil der Datei nicht null ist, betrachtet diff die Datei als Text, sonst betrachtet sie die Datei binär. Manchmal möchtest du vielleicht Gedanken machen, um Dateien zu betrachten, um Text zu sein. Zum Beispiel könnten Sie Textdateien vergleichen, die Nullzeichen enthalten. Diff würde fälschlicherweise entscheiden, dass es sich um Nicht-Textdateien handelt. Oder Sie können Dokumente vergleichen, die sich in einem Format befinden, das von einem Textverarbeitungssystem verwendet wird, das Nullzeichen verwendet, um eine spezielle Formatierung anzuzeigen. Sie können diff, um alle Dateien zu betrachten, um Textdateien zu sein, und vergleichen Sie sie Zeile für Zeile, indem Sie die Option --text (-a) verwenden. Wenn die Dateien, die Sie mit dieser Option vergleichen, nicht in der Tat Text enthalten, werden sie wahrscheinlich nur wenige Zeilenumbrüche enthalten, und die diff-Ausgabe besteht aus Hunks, die Unterschiede zwischen den langen Zeilen der beliebigen Zeichen enthalten, die die Dateien enthalten. Sie können auch diff nur zu melden, ob Dateien unterscheiden (aber nicht wie). Verwenden Sie dazu die Option --brief (-q). In Betriebssystemen, die zwischen Text - und Binärdateien unterscheiden, liest diff immer alle Daten als Text. Verwenden Sie die Option - Binary, um das Diff zum Lesen und Schreiben von Binärdaten zu erzwingen. Diese Option hat keine Auswirkung auf ein POSIX-kompatibles System wie GNU oder traditionelles Unix. Allerdings stellen viele Personalcomputer-Betriebssysteme das Ende einer Zeile mit einem Wagenrücklauf dar, gefolgt von einem Zeilenumbruch. Bei solchen Systemen ignoriert diff normalerweise diese Wagenrückführungen am Eingang und erzeugt sie am Ende jeder Ausgangszeile, aber mit der - Binary Option diff behandelt jeder Wagenrücklauf als nur ein weiteres Eingabezeichen und erzeugt keinen Wagenrücklauf an der Ende jeder Ausgangszeile. Dies kann beim Umgang mit Nicht-Text-Dateien nützlich sein, die mit POSIX-kompatiblen Systemen vertauscht werden sollen. Die - Streifen-Nachlauf-Cr verursacht Diff, um Eingabezeilen zu behandeln, die im Wagenrücklauf enden, gefolgt von einem Zeilenumbruch, als ob sie in einem einfachen Zeilenumbruch enden. Dies kann nützlich sein, wenn man Text vergleicht, der unvollständig von vielen Personalcomputersystemen importiert wird. Diese Option beeinflusst, wie Zeilen gelesen werden, was wiederum beeinflusst, wie sie verglichen und ausgegeben werden. Wenn du zwei Dateien Byte Byte vergleichen möchtest, kannst du das Programm cmp mit der Option --verbose (-l) verwenden, um die Werte jedes abweichenden Bytes in den beiden Dateien anzuzeigen. Mit GNU cmp. Sie können auch die Option - b oder --print-bytes verwenden, um die ASCII-Darstellung dieser Bytes anzuzeigen. Siehe Aufruf von cmp. für mehr Informationen. Wenn diff3 denkt, dass irgendeine der Dateien, die es vergleicht, binär ist (eine Nicht-Textdatei), so berichtet sie normalerweise einen Fehler, weil solche Vergleiche normalerweise nicht sinnvoll sind. Diff3 verwendet den gleichen Test wie diff, um zu entscheiden, ob eine Datei binär ist. Wie bei diff. Wenn die Eingabedateien einige Nicht-Text-Bytes enthalten, aber ansonsten wie Textdateien sind, kannst du diff3 dazu zwingen, alle Dateien als Textdateien zu betrachten und sie zeilenweise mit der Option - a oder --text option. nacho4d zu vergleichen: That39s Seltsam, denn git sollte gar nicht wissen, dass es irgendwelche erweiterten Attribute gibt. Wenn du es reproduzieren könntest, wäre es wert, die git Mailingliste aufzurufen. Wie ist eine gute Gewohnheit auf vger. kernel. org Listen, müssen Sie nicht abonnieren, um zu posten (die Leute halten Sie CC39ed für Antworten) und sind irgendwie angeblich nicht das ziemlich hohe Volumen der gitvger. kernel. org Liste gegeben. Ndash Jan Hudec Es bedeutet einfach, wenn git inspiziert den tatsächlichen Inhalt der Datei (es weiß nicht, dass jede gegebene Erweiterung ist keine binäre Datei - Sie können die Attribute Datei verwenden, wenn Sie es explizit sagen wollen - siehe die man-seiten). Nach der Inspektion der Dateien Inhalt hat es Zeug, das nicht in grundlegenden ascii Zeichen gesehen hat. Als UTF16 erwarte ich, dass es lustige Charaktere haben wird, also denkt es seine binäre. Es gibt Möglichkeiten, Git zu sagen, wenn Sie Internationalisierung (i18n) oder erweiterte Zeichenformate für die Datei haben. Im nicht genügend auf die genaue Methode für die Einstellung, die - müssen Sie möglicherweise RTFullM -) Edit: eine schnelle Suche von SO gefundenen can-i-make-git-erkennen-a-utf-16-Datei-als-Text, die sollte Gib dir ein paar Hinweise. Sie sind fast aber nicht ganz nicht falsch. Git hat die eigentlichen Akten überprüft und dort 39Funny39 Charaktere gesehen. Allerdings ist es nicht wichtig, dass UTF-16 binär ist. Es ist binär, weil Text als ASCII-basiert definiert ist (das ist nur das eingebaute diff gibt nutzbare Ergebnisse für) und UTF-16 ist nicht. Ja, es gibt einen Weg zu sagen, git, um spezielle diff für Muster definierte Dateien (mit. gitattributes) zu verwenden. Ndash Jan Hudec Jul 28 11 um 9:27 Ich sollte hinzufügen, dass 39funny Zeichen39 wirklich null Bytes bedeutet. Ndash Jan Hudec Jul 28 11 um 9:31 Wir sind beide richtig, aber aus verschiedenen Perspektiven. Wir beide sagen, quotGit inspiziert den Inhalt zu bestimmen, seine type. quot Wir beide sagen, dass git wissen, dass es behandelt werden sollte als UTF16 der Benutzer muss git über. gitattributes etc. ndash Philip Oakley Jul 28 11 um 9:34 Was ist Das Gegenteil von check-attr - gibt es eine set-attr Ich habe ursprünglich versehentlich eine Datei als UTF-16 gespeichert, dann begangen und gedrückt, und jetzt BitBucket sieht es als UTF-16, auch nach dem Re-Speichern als UTF-8 , Beaufsichtigt und drückt es wieder. Dies macht grundsätzlich meine Pull-Anfragen unmöglich zu lesen, weil Rezensenten müssen in jeden einzelnen Kommentar klicken, um Rezension Kommentare hinzufügen. Ndash John Zabroski Ich war mit diesem Problem, wo Git GUI und SourceTree war die Behandlung von JavaJS-Dateien als binäre und damit nicht sehen Unterschied Erstellen von Datei namens Attribute in. Gitinfo Ordner mit folgendem Inhalt das Problem gelöst Wenn Sie möchten, Machen Sie diese Änderung für alle Repositories dann können Sie Attribute Datei in folgenden Ort hinzufügen HOME. configgitattributes Ich hatte das gleiche Problem nach der Bearbeitung einer meiner Dateien in einem neuen Editor. Stellt sich heraus, dass der neue Editor eine andere Codierung (Unicode) als mein alter Editor (UTF-8) verwendet hat. Also habe ich einfach meinen neuen Redakteur gesagt, um meine Dateien mit UTF-8 zu speichern und dann git zeigte meine Änderungen wieder richtig und sah es nicht als Binärdatei. Ich denke, das Problem war einfach, dass git nicht wissen, wie man Dateien von verschiedenen Codierungstypen vergleichen kann. Also die Kodierung Typ, den Sie wirklich verwenden, egal, solange es bleibt konsistent. Ich habe es nicht getestet, aber ich bin mir sicher, ob ich meine Datei mit der neuen Unicode-Codierung begangen hätte, als ich das nächste Mal Änderungen an dieser Datei vorgenommen hätte, hätte es die Änderungen richtig angezeigt und es nicht als Binär erkannt, da es dann hätte Vergleiche zwei Unicode-codierte Dateien und keine UTF-8-Datei in einer Unicode-Datei. Sie können eine App wie Notepad verwenden, um den Codierungstyp einer Textdatei leicht zu sehen und zu ändern. Öffnen Sie die Datei im Editor und verwenden Sie das Menü Encoding in der Symbolleiste. Ich habe nur mehrere Stunden damit verbracht, alles auf dieser Liste durchzusetzen, um herauszufinden, warum einer der Testprojekte in meiner Lösung keine Tests für den Explorer hinzufügte. Es stellte sich in meinem Fall heraus, dass irgendwie (vermutlich wegen einer armen Git irgendwo verschmelzen), dass VS eine Referenz das Projekt insgesamt verloren hatte. Es baute noch, aber ich bemerkte, dass es nur die Abhängigkeiten gebaut hat. Ich habe dann bemerkt, dass es nicht in der Abhängigkeitsliste selbst auftaucht, also habe ich das Testprojekt entfernt und erneut hinzugefügt und alle meine Tests wurden endlich angezeigt. Beantwortet Dec 4 14 um 14:51 Visual Studio ist hier wirklich nicht relevant. Ndash jpaugh Dec 12 16 at 14:58 Ihre Antwort 2017 Stack Exchange, Inc13.1 Optionen zu diff Unten ist eine Zusammenfassung aller Optionen, die GNU diff akzeptiert. Die meisten Optionen haben zwei gleichwertige Namen, von denen einer ein einziger Buchstabe ist, der von lsquo - rsquo vorausgeht, und der andere ist ein langer Name, der von lsquo - rsquo vorausgeht. Mehrere einzelne Buchstabenwahlen (es sei denn, sie nehmen ein Argument) können zu einem einzigen Befehlszeilenwort kombiniert werden: - ac ist äquivalent zu - a - c. Lange benannte Optionen können zu jedem beliebigen Präfix ihres Namens abgekürzt werden. Klammern (und) zeigen an, dass eine Option ein optionales Argument annimmt. Behandle alle Dateien als Text und vergleiche sie zeilenweise, auch wenn sie nicht scheinen, Text zu sein. Siehe Binary. Ignorieren Sie die Anzahl der Leerzeichen. Siehe White Space. Ignorieren Sie Änderungen, die einfach leere Zeilen einfügen oder löschen. Siehe Blank Lines. Lesen und Schreiben von Daten im Binärmodus. Siehe Binary. Verwenden Sie das Kontext-Ausgabeformat mit drei Kontextlinien. Siehe Kontextformat. Geben Sie an, ob die Farbe verwendet werden soll, um verschiedene Kontexte zu unterscheiden, wie zB Header, hinzugefügte oder entfernte Zeilen. Wann kann weggelassen werden, oder einer von: keiner Verwenden Sie keine Farbe überhaupt. Dies ist die Voreinstellung, wenn keine ndashcolor-Option angegeben ist. Auto Verwenden Sie Farbe nur, wenn Standardausgabe ein Terminal ist. Immer immer Farbe verwenden. Angabe - Farbe und nein, wenn gleich --colorauto ist. - C-Linien - Kontextzeilen Verwenden Sie das Kontext-Ausgabeformat, das Zeilen (eine Ganzzahl) Zeilen des Kontexts oder drei Zeilen zeigt, die nicht angegeben werden. Siehe Kontextformat. Für den ordnungsgemäßen Betrieb benötigt Patch oft mindestens zwei Kontextlinien. Für Kompatibilität diff unterstützt auch eine veraltete Option Syntax - Zeilen, die Wirkung hat, wenn mit - c kombiniert. - p. Oder - u. Neue Skripte sollten stattdessen - U Zeilen (-C Zeilen) verwenden. Verwenden Sie das Format, um eine Zeilengruppe auszugeben, die unterschiedliche Zeilen aus beiden Dateien im if-then-else-Format enthält. Siehe Liniengruppenformate. Ändern Sie den Algorithmus vielleicht finden Sie einen kleineren Satz von Änderungen. Dies macht diff langsamer (manchmal viel langsamer). Siehe diff Leistung. - D name --ifdef name Machen Sie zusammengeführt lsquo ifdef rsquo format Ausgabe, bedingt vom Preprozessor Makronamen. Siehe If-then-else. Machen Sie die Ausgabe, die ein gültiges Ed-Skript ist. Siehe Ed Scripts. Änderungen aufgrund der Tabulatorerweiterung ignorieren Siehe White Space. Machen Sie die Ausgabe, die vage wie ein Ed-Skript aussieht, aber Änderungen in der Reihenfolge, in der sie in der Datei erscheinen. Siehe Forward ed. - F regexp --show-function-line regexp Im Kontext und vereinheitlichten Format, für jeden Teil der Unterschiede, zeigen Sie einige der letzten vorhergehenden Zeile, die regexp entspricht. Siehe angegebene Überschriften. Datei in jede Operandendatei vergleichen kann ein Verzeichnis sein. Geben Sie eine Zusammenfassung der Nutzung aus und beenden Sie dann. Verwerfe nicht die letzten Zeilen des gemeinsamen Präfixes und die ersten Zeilen des gemeinsamen Suffixes. Siehe diff Leistung. Ignorieren Sie die Änderungen im Falle von Groß - und Kleinbuchstaben gleichwertig. Siehe Case Folding. - I regexp --ignore-matching-lines regexp Ignorieren Sie Änderungen, die einfach einfügen oder löschen, die mit regexp übereinstimmen. Siehe Spezifizierte Linien. Ignorieren Sie den Fall beim Vergleich von Dateinamen. Zum Beispiel könnte der rekursive Vergleich von d zu e den Inhalt von dInit und einIt vergleichen. Auf der obersten Ebene, lsquo diff d inIt rsquo könnte der Inhalt von dInit und inIt vergleichen. Siehe Vergleich Verzeichnisse. Übergeben Sie die Ausgabe durch pr, um es zu paginieren. Siehe Paginierung. - L-Label - Label Label Verwenden Sie das Label anstelle des Dateinamens im Kontextformat (siehe Kontextformat) und vereinheitlichte Format (siehe Unified Format). Siehe RCS. Drucken Sie nur die linke Spalte von zwei gemeinsamen Zeilen in Seite an Seite Format. Siehe nebeneinanderliegendes Format. Verwenden Sie das Format, um alle Eingabezeilen im if-then-else-Format auszugeben. Siehe Zeilenformate. Ausgang RCS-Format diffs wie - f, außer dass jeder Befehl die Anzahl der betroffenen Zeilen angibt. Siehe RCS. Wenn eine Datei fehlt, behandle sie als Gegenwart, aber leer. Siehe Vergleich Verzeichnisse. Verwenden Sie das Format, um eine Gruppe von Zeilen aus der zweiten Datei im if-then-else-Format auszugeben. Siehe Liniengruppenformate. Verwenden Sie das Format, um eine Zeile aus der zweiten Datei im if-then-else-Format auszugeben. Siehe Linienformate. Handeln Sie auf symbolische Links selbst, anstatt was sie darauf hinweisen. Zwei symbolische Links werden nur dann als gleich angesehen, wenn jeder genau auf denselben Namen verweist. Verwenden Sie das Format, um eine Gruppe von Zeilen aus der ersten Datei im if-then-else-Format auszugeben. Siehe Liniengruppenformate. Verwenden Sie das Format, um eine Zeile aus der ersten Datei im if-then-else-Format auszugeben. Siehe Linienformate. Zeigen Sie, welche C-Funktion jede Änderung hat. Siehe C Funktionsüberschriften. Geben Sie an, welche Farbpalette verwendet werden soll, wenn die farbige Ausgabe aktiviert ist. Es ist standardmäßig auf lsquo rs0: hd1: ad32: de31: ln36 rsquo für rote gelöschte Zeilen, grüne hinzugefügte Zeilen, Cyan Zeilennummern, fette Kopfzeile. Unterstützte Fähigkeiten sind wie folgt. SGR-Teilstring für weitere Zeilen. Die Voreinstellung ist grüner Vordergrund. SGR-Teilstring für gelöschte Zeilen. Die Voreinstellung ist roter Vordergrund. SGR-Substring für Chunk-Header. Die Voreinstellung ist fett Vordergrund. SGR-Teilstring für Zeilennummern. Die Voreinstellung ist Cyan Vordergrund. Melden Sie nur, ob sich die Dateien unterscheiden, nicht die Details der Unterschiede. Siehe Brief. Beim Vergleich von Verzeichnissen, rekursiv vergleichen alle Unterverzeichnisse gefunden. Siehe Vergleich Verzeichnisse. Melden Sie, wenn zwei Dateien gleich sind. Siehe Vergleich Verzeichnisse. - S-Datei - Start-Datei-Datei Beim Vergleich von Verzeichnissen starten Sie mit der Datei-Datei. Dies wird für die Wiederaufnahme eines abgebrochenen Vergleichs verwendet. Siehe Vergleich Verzeichnisse. Verwenden Sie Heuristiken, um die Handhabung von großen Dateien zu beschleunigen, die zahlreiche verstreute kleine Änderungen haben. Siehe diff Leistung. Ziehen Sie jeden hinteren Schlittenrücklauf am Ende einer Eingabezeile ab. Siehe Binary. Drucken Sie keine gemeinsamen Zeilen im Side-by-Side-Format. Siehe nebeneinanderliegendes Format. Erweitern Sie Tabs auf Leerzeichen in der Ausgabe, um die Ausrichtung der Registerkarten in den Eingabedateien zu bewahren. Siehe Tabs. Geben Sie eine Registerkarte anstatt ein Leerzeichen vor dem Text einer Zeile im Normal - oder Kontextformat ein. Dies führt dazu, dass die Ausrichtung der Registerkarten in der Zeile normal aussieht. Siehe Tabs. Angenommen, die Tabstopps werden in jeder Spalte (Standard 8) Spalten gesetzt. Siehe Tabs. Unterdrückung von Leerzeichen vor Zeilenumbrüchen beim Drucken der Darstellung einer Leerzeile bei der Ausgabe von Normal-, Kontext - oder Unified-Format. Siehe Schleppleisten. Vergleichen Sie jeden Operanden in Datei Datei kann ein Verzeichnis sein. Verwenden Sie das vereinheitlichte Ausgabeformat mit drei Zeilen Kontext. Siehe Unified Format. Verwenden Sie das Format, um eine Gruppe von gemeinsamen Zeilen aus beiden Dateien im if-then-else-Format auszugeben. Siehe Liniengruppenformate. Verwenden Sie das Format, um eine Zeile auszugeben, die für beide Dateien im if-then-else-Format gemeinsam ist. Siehe Linienformate. Wenn eine erste Datei fehlt, behandle sie als Gegenwart, aber leer. Siehe Vergleich Verzeichnisse. - U Zeilen - zugelassene Zeilen Verwenden Sie das vereinheitlichte Ausgabeformat, Zeilen (eine ganzzahlige) Zeilen des Kontextes oder drei, wenn Zeilen nicht angegeben sind. Siehe Unified Format. Für den ordnungsgemäßen Betrieb benötigt Patch oft mindestens zwei Kontextlinien. Bei älteren Systemen unterstützt diff eine veraltete Option - Zeilen, die bei der Kombination mit - u wirksam sind. POSIX 1003.1-2001 (siehe Normenkonformität) erlaubt diese Verwendung nicht nur - U Zeilen. Geben Sie die Versionsinformationen aus und beenden Sie dann. Ignoriere Leerraum beim Vergleich von Zeilen. Siehe White Space. - W Spalten - Breite Spalten Ausgabe an den meisten Spalten (Standard 130) drucken Spalten pro Zeile in Seite an Seite Format. Siehe nebeneinanderliegendes Format. - x-Muster - Ausschlussmuster Beim Vergleich von Verzeichnissen ignorieren Sie Dateien und Unterverzeichnisse, deren Basenamen mit dem Muster übereinstimmen. Siehe Vergleich Verzeichnisse. - X-Datei - Exclude-from-Datei Beim Vergleich von Verzeichnissen ignorieren Sie Dateien und Unterverzeichnisse, deren Basenamen mit einem in der Datei enthaltenen Muster übereinstimmen. Siehe Vergleich Verzeichnisse. Verwenden Sie das nebeneinander liegende Ausgabeformat. Siehe nebeneinanderliegendes Format. Ignorieren Sie den Leerraum am Zeilenende. Siehe White Space.

No comments:

Post a Comment