Probleme mit der Ausgabekodierung von „git log“ im Windows 10-CLI-Terminal

Lesezeit: 6 Minuten

Benutzer-Avatar von Marcin Kłopotek
Marcin Kłopotek

Problem

Wie kann ich machen git log Wird die Befehlsausgabe im Windows-CLI-Terminal ordnungsgemäß angezeigt?

Beispiel

Git-Befehlssequenz, die zum Problem führt

Wie Sie sehen, kann ich diakritische Zeichen richtig eingeben, aber nicht git log, die Ausgabe wird irgendwie maskiert. Entsprechend der UTF-8-Codierungstabelledie Codes in spitzen Klammern (< Und >) aus der Ausgabe entsprechen den zuvor eingegebenen git config Parameter.

Ich habe versucht einzustellen LESSCHARSET Umgebungsvariable zu utf-8 wie in einer der Antworten zu einem ähnlichen Problem vorgeschlagen, aber dann ist die Ausgabe verstümmelt:

'git log'-Ausgabe nach dem Setzen von LESSCHARSET=utf8

Ich weiss .git/config wird ordnungsgemäß mit UTF-8 codiert, da es von verarbeitet wird gitk wie erwartet.

Richtige Gitk-Ausgabe

Hier ist das locale Befehlsausgabe bei Bedarf:

LANG=
LC_CTYPE="C.UTF-8"
LC_NUMERIC="C.UTF-8"
LC_TIME="C.UTF-8"
LC_COLLATE="C.UTF-8"
LC_MONETARY="C.UTF-8"
LC_MESSAGES="C.UTF-8"
LC_ALL=

Die Ausgabe ist auch in Pure gleich Git Bash:

Geben Sie hier eine Bildbeschreibung ein

Daher glaube ich, dass das Problem Shell-unabhängig ist und mit Git oder seiner Konfiguration selbst zusammenhängt.

  • Haben Sie die Lösung unter „Unicode-Zeichen in der Windows-Befehlszeile – wie?“ ausprobiert?

    – jthill

    31. Dezember 2016 um 0:01

  • Ja, ich habe mehrere Codepages ausprobiert, darunter 65001 (UTF-8), ohne Ergebnis. Es scheint, dass der Befehl chcp keinen Einfluss darauf hat, wie die Ausgabe des Git-Protokolls angezeigt wird. Es wird immer auf die gleiche Weise angezeigt.

    – Marcin Kłopotek

    31. Dezember 2016 um 13:54 Uhr

  • Tut mir leid, wenn die Frage dumm klingt, aber warum verwenden Sie überhaupt die Windows-Eingabeaufforderung anstelle von Git Bash? Es eignet sich besser für die Verwendung von Git, die Größe des Fensters kann bis zum Vollbild geändert werden, die Eingabeaufforderung zeigt Ihnen automatisch an, in welchem ​​Zweig Sie sich befinden usw.

    – kriegaex

    1. Januar 2017 um 14:09

  • Es ist nicht dumm @kriegaex, es ist eigentlich gut. Für den täglichen Gebrauch verwende ich in ConEmu verpacktes Git-Bash. Das Ergebnis ist das gleiche i.imgur.com/hMKz9D3r.png. Ich habe mein Problem beschrieben und Beispiele mit cmd.exe gegeben, um die Leute nicht mit anderen abhängigen Tools zu verwechseln, die ich verwende, da ich glaube, dass das Problem Shell-unabhängig ist und mit Git oder seiner Konfiguration selbst zusammenhängt.

    – Marcin Kłopotek

    1. Januar 2017 um 14:24

  • @jthill danke, diese Antwort scheint es zu tun, stackoverflow.com/a/55674760/4592648

    – Montagsmüdigkeit

    5. Januar 2022 um 10:48

Benutzeravatar von kriegaex
kriegaex

Okay, ich habe ein bisschen experimentiert und herausgefunden, dass Windows-Git-Befehle tatsächlich UNIX-Variablen wie z. B. benötigen LC_ALL um Polnisch (oder andere UTF-8-Zeichen) korrekt anzuzeigen. Probieren Sie einfach diesen Befehl aus:

set LC_ALL=C.UTF-8

Dann genießen Sie das Ergebnis. Folgendes ist auf meiner Konsole passiert (Schriftart „Consolas“, Nr chcp notwendig):

CMD der Windows-Konsole


Aktualisieren:

  • Nun, damit Windows-Befehle wie type (Datei auf der Konsole anzeigen), um ordnungsgemäß zu funktionieren, benötigen Sie chcp 65001.
  • Und wenn Sie Befehle von Git Bash bevorzugen cat Sie profitieren davon set LC_ALL=C.UTF-8.

Windows-Konsolen-CMD, Teil 2


Update 2: So machen Sie die Änderungen dauerhaft

Als Benutzer Mono Blaine sagte, erstellen Sie eine Umgebungsvariable LC_ALL und weisen Sie ihm den Wert zu C.UTF-8entweder global oder nur für Ihr eigenes Benutzerprofil (Entschuldigung für den deutschen Screenshot):

Umgebungsvariable erstellen

Wenn Sie das nächste Mal eine Befehlsprozessorkonsole (cmd.exe) öffnen, sollten Sie beim Ausgeben des Befehls den Variablenwert sehen echo %LC_ALL%. In PowerShell sollte es bei der Ausgabe angezeigt werden $env:LC_ALL.

Der einfachste Weg, die UTF-8-Codepage dauerhaft zu machen, besteht darin, sie zu öffnen regeedit und fügen Sie einen neuen Wert mit dem Namen hinzu Autorun vom Typ Zeichenfolge zum Abschnitt
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor und weisen Sie ihm den Wert zu chcp 65001.

Registrierungsredakteur

Von nun an wird dieser Befehl jedes Mal ausgeführt, wenn Sie eine neue cmd.exe-Konsole öffnen. Sie sehen sogar die Ausgabe im neuen Fenster: „Aktive Codepage: 65001.“ (oder ähnlich in Ihrer jeweiligen Sprache).

Übrigens: Um eine UTF-8-kodierte Datei korrekt in PowerShell anzuzeigen, können Sie Folgendes verwenden: Get-Content -encoding UTF8 file.txt oder cat -encoding UTF8 file.txt (cat ein Alias ​​sein für Get-Content in PowerShell).

  • Satz LC_ALL wird von Git selbst nicht benötigt. Andere Tools – die mit der Git-Installation geliefert werden – mögen lessdas ist der Standard-Pager / see core.pager nutzen die LC_ALL Wert. Andere gültige Werte sind die lokalisierte Sprache, z. B.: LC_ALL=de_DE.UTF-8 für die Deutschen.

    – zurück42

    4. November 2017 um 13:41 Uhr


  • Sie können die Umgebungsvariable über die Befehlszeile festlegen setx LC_ALL C.UTF-8

    – Anion

    14. April 2019 um 17:49 Uhr


  • Powershell 6 in ConEmu reichte zum Hinzufügen $env.LC_ALL='ClUTF-8' Zu $Profile

    – Andrew Spencer

    19. Februar 2020 um 9:51 Uhr

  • Hatte ein Codierungsproblem mit dem Rscript-Dienstprogramm (Befehlszeilentool zum Ausführen von R-Code), dieser Rat half ebenfalls, es zu beheben. Danke!

    – SliceOfTuna

    28. September 2021 um 2:21

Benutzeravatar von Mono Blaine
Mono Blaine

Wenn sich jemand für das PowerShell-Äquivalent von interessiert set LC_ALL=C.UTF-8das ist:

$env:LC_ALL='C.UTF-8'

Dies funktioniert jedoch nur für die aktuelle Sitzung. Um es dauerhaft zu machen, gibt es zwei Möglichkeiten:

  • Erstellen Sie eine Umgebungsvariable mit dem Namen LC_ALL mit dem Wert C.UTF-8
  • oder setzen $env:LC_ALL='C.UTF-8' in deinem $Profile Datei

  • Oder fügen Sie es Ihrem PowerShell-Profil hinzu (ich bevorzuge dies gegenüber der globalen Einstellung, da ich dasselbe Profil – über Git – auf mehreren Computern verwende).

    – Richard

    21. November 2017 um 11:29 Uhr

  • Die Profildatei kann bearbeitet werden, indem Sie beispielsweise Folgendes ausführen: notepad $profile. Fügen Sie dann irgendwo eine Zeile hinzu, wie Mono Blaine vorgeschlagen hat: $env:LC_ALL=’C.UTF-8′

    – Tore Aurstad

    25. September 2018 um 8:58

  • Mit PowerShell 6 + ConEmu unter Windows 10: Das funktioniert, es war nichts anderes nötig

    – Andrew Spencer

    19. Februar 2020 um 9:55 Uhr

Benutzeravatar von Ayşe Nur
Ayşe Nur

ich benutze Git über PowerShell Core v7.0.3 innen Windows-Terminal unter Windows 10.

Ich habe die Antworten durchgesehen und viele davon ausprobiert. Die Lösungen, die für mich funktionierten, waren:

  • Ändern Sie eine Git-Einstellung: git config --global core.pager 'less --raw-control-chars'
  • Hinzufügen $env:LC_ALL = 'C.UTF-8' zum aktuellen PowerShell-Profil

Diese Lösungen funktionieren beide separat. Ich habe mich für die Verwendung des Git-Befehls entschieden, da das Problem anscheinend mit Git zusammenhängt und das PowerShell-Profil sauberer bleibt.

  • Danke für die Git-Einstellung. Die Git-Einstellungen funktionieren bei mir, habe diese Einstellung aber auch gefunden $env:LESSCHARSET='utf-8' Funktioniert auch gut für PowerShell 5 im Windows-Terminal.

    – mloskot

    28. September 2020 um 9:40 Uhr

W.Perrins Benutzeravatar
W. Perrin

ich benutze Git Bash unter Windows 10. Was mich betrifft, entsprechen vier Einstellungen meinen Erwartungen.

  • env Einstellung. Hinzufügen LC_ALL=C.UTF-8,LESSCHARSET=UTF-8 Zu PATH global.

  • git config. git config --global i18n.logOutputEncoding utf-8.

  • Git Bash-Einstellung. Satz OptionenTextZeichensatz Zu utf-8. Oder einstellen locale Und Character set beide zu default. Es ist klug genug, das Richtige zu wählen encoding.

Erledigt.

Benutzeravatar von John K
John K

Ich musste die Windows PowerShell-Eingabeaufforderung anstelle der Standardeingabeaufforderung verwenden (Windows-Taste + X).

  • Es funktioniert wie ein Zauber für Koreaner.

    – Park JongBum

    8. November 2022 um 16:00 Uhr

Benutzer-Avatar von Peter Mortensen
Peter Mortensen

Ich hatte ein solches Problem unter Linux. Und das Problem war, dass ich keine Gebietsschemas generiert habe. Also meine Ausgabe von locale enthielt alle „C“-Buchstaben, ohne UTF-8.

Um dies zu lösen, habe ich den Kommentar entfernt en_US.UTF-8 Und ru_RU.UTF-8 in /etc/locale.gen. Dann führe ich localectl set-locale LANG=ru_RU.UTF-8 aus und starte neu. Und erneut beim System angemeldet. Danach wurde Kyrillisch normal angezeigt.

  • Es funktioniert wie ein Zauber für Koreaner.

    – Park JongBum

    8. November 2022 um 16:00 Uhr

Benutzeravatar von DEV Tiago França
DEV Tiago França

git config --global core.pager 'less --raw-control-chars'
 
#Or

git config --global core.pager 'more'

1450600cookie-checkProbleme mit der Ausgabekodierung von „git log“ im Windows 10-CLI-Terminal

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy