Standardmäßig scheint es gitmit UTF-16 nicht gut zu funktionieren. Für eine solche Datei müssen Sie sicherstellen, dass keine CRLFVerarbeitung durchgeführt wird, aber Sie möchten diffund mergewie eine normale Textdatei arbeiten (dies ignoriert, ob Ihr Terminal / Editor UTF-16 verarbeiten kann oder nicht).
.gitattributesWenn Sie sich jedoch die Manpage ansehen , sehen Sie hier das benutzerdefinierte Attribut binary:
[attr]binary -diff -crlf
Daher scheint es mir, dass Sie ein benutzerdefiniertes Attribut in Ihrer obersten Ebene .gitattributesfür definieren können utf16(beachten Sie, dass ich hier Zusammenführung hinzufüge, um sicherzustellen, dass es als Text behandelt wird):
[attr]utf16 diff merge -crlf
Von dort aus können Sie in jeder .gitattributesDatei Folgendes angeben :
*.vmc utf16
Beachten Sie auch, dass Sie weiterhin in der Lage sein sollten, diffeine Datei zu erstellen, auch wenn gitSie der Meinung sind , dass sie binär ist mit:
git diff --text
Bearbeiten
Diese Antwort besagt im Grunde, dass GNU diff mit UTF-16 oder sogar UTF-8 nicht sehr gut funktioniert. Wenn Sie gitein anderes Tool verwenden möchten, um Unterschiede (über --ext-diff) zu erkennen, schlägt diese Antwort Guiffy vor .
Was Sie aber wahrscheinlich brauchen, ist nur diffeine UTF-16-Datei, die nur ASCII-Zeichen enthält. Eine Möglichkeit, dies zum Laufen zu bringen, ist die Verwendung --ext-diffdes folgenden Shell-Skripts:
#!/bin/bash
diff <(iconv -f utf-16 -t utf-8 "$1") <(iconv -f utf-16 -t utf-8 "$2")
Beachten Sie, dass die Konvertierung in UTF-8 möglicherweise auch zum Zusammenführen funktioniert. Sie müssen lediglich sicherstellen, dass die Konvertierung in beide Richtungen erfolgt.
Wie für die Ausgabe an das Terminal, wenn ein Diff einer UTF-16-Datei betrachtet wird:
Der Versuch, sich so zu unterscheiden, führt dazu, dass binärer Müll auf den Bildschirm gespuckt wird. Wenn git GNU diff verwendet, scheint es, dass GNU diff nicht Unicode-fähig ist.
GNU diff kümmert sich nicht wirklich um Unicode. Wenn Sie also diff --text verwenden, unterscheidet es sich nur und gibt den Text aus. Das Problem ist, dass das von Ihnen verwendete Terminal das ausgegebene UTF-16 nicht verarbeiten kann (kombiniert mit den Diff-Markierungen, die ASCII-Zeichen sind).