problemy z kodowaniem Git log w wierszu polecenia Windows 10

Problem

Jak sprawić, by wyjście polecenia git log było poprawnie wyświetlane w wierszu polecenia systemu windows?

Przykład

Sekwencja poleceń git prowadząca do problemu Jak widać mogę poprawnie wpisywać znaki diakrytyczne, ale na git log wyjście jest jakoś unikalne. Według UTF-8 tabela kodowania kody pomiędzy nawiasami kątowymi (< i >) z wyjścia odpowiadają wcześniej wpisanym parametrom git config.

Próbowałem ustawić LESSCHARSET środowisko zmienna do {[8] } jako sugested w jedna z odpowiedzi na podobny problem ale wtedy wyjście jest zniekształcone:

wyjście dziennika git po ustawieniu LESSCHARSET=utf8

Wiem, że .git/config jest poprawnie zakodowane utf-8, ponieważ jest obsługiwane przez gitk zgodnie z oczekiwaniami.

Poprawne wyjście gitk

Oto locale wyjście polecenia w razie potrzeby

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=

EDIT:

Wyjście jest takie samo również w czystym git-bash :

Tutaj wpisz opis obrazka

Więc wierzę, że problem jest niezależna od powłoki i odnosi się do Gita lub jego samej konfiguracji.

Author: Community, 2016-12-14

6 answers

Dobra, trochę poeksperymentowałem i dowiedziałem się, że polecenia Git w systemie Windows potrzebują zmiennych uniksowych, takich jak LC_ALL, aby poprawnie wyświetlać polskie (lub inne znaki UTF-8). Po prostu spróbuj tego polecenia:

set LC_ALL=C.UTF-8

Ciesz się wynikiem. Oto, co stało się na mojej konsoli (czcionka "Consolas", nie chcp konieczne):

Konsola Windows CMD


Update:

  • Cóż, aby komendy Windows takie jak type (Wyświetl plik na konsoli) działały poprawnie, potrzebujesz chcp 65001.
  • a jeśli wolisz polecenia z Git Basha, takie jak cat zyskujesz na wspomnianym set LC_ALL=C.UTF-8.

CMD konsoli Windows, część 2


Aktualizacja 2: Jak sprawić, by zmiany stały

Jak powiedział użytkownik mono blaine, Utwórz zmienną środowiskową LC_ALL i przypisz jej wartość C.UTF-8, globalnie lub tylko dla własnego profilu użytkownika (sorry za Niemiecki screenshot):

Tworzenie zmiennej środowiskowej

Następnym razem, gdy otworzysz konsolę procesora poleceń (cmd.exe) powinieneś zobaczyć wartość zmiennej podczas wydawania polecenia echo %LC_ALL%. W PowerShell powinieneś go zobaczyć podczas wydawania $env:LC_ALL.

Najprostszym sposobem na stałe otwarcie strony kodowej UTF-8 regeedit i dodanie nowej wartości o nazwie Autorun typu string do sekcji {[13] } i przypisać mu wartość chcp 65001.

Edytor rejestracji

Odtąd Komenda ta będzie wykonywane za każdym razem, gdy otwierasz nowy cmd.konsola exe. Możesz nawet zobaczyć jego wyjście w nowym oknie: "Aktive Codepage: 65001."(lub podobne w danym języku).

Przy okazji: aby poprawnie wyświetlić kodowany plik UTF-8 W PowerShell możesz użyć Get-Content -encoding UTF8 file.txt lub cat -encoding UTF8 file.txt (cat BYĆ aliasem dla Get-Content w PowerShell).

 160
Author: kriegaex,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-08-31 03:45:36

Jeśli ktoś jest zainteresowany odpowiednikiem PowerShell set LC_ALL=C.UTF-8, to znaczy:

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

Jednak działa to tylko dla bieżącej sesji. Aby uczynić go trwałym, dwie możliwości:

  • Utwórz zmienną środowiskową o nazwie LC_ALL z wartością C.UTF-8
  • lub umieść $env:LC_ALL='C.UTF-8' w swoim $Profile pliku
 68
Author: mono blaine,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-02-19 09:54:36

Używam Git Poprzez PowerShell Core v7.0.3 z posh-git zainstalowanym wewnątrz Windows Terminal w systemie Windows 10.

Przeglądałem odpowiedzi i próbowałem wielu z nich. Rozwiązania, które działały dla mnie były:

Oba te rozwiązania działają osobno. Zdecydowałem się użyć polecenia Git jako problemu wygląda na to, że jest związany z Gitem, a Powershell profile pozostaje czystszy.
 6
Author: Ayşe Nur,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-12-09 18:06:07

Używam git bash Na WIN10. Jeśli chodzi o mnie, 4 Ustawienia sprawiają, że wygląd jest moim oczekiwaniem.

  • env ustawienie. Dodaj LC_ALL=C.UTF-8,LESSCHARSET=UTF-8 do PATH globalnie.

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

  • git bash ustawienie. Ustaw Options-> Text-> Character set na utf-8. Lub ustawić locale i Character set na default. Jest wystarczająco inteligentny, aby wybrać właściwy encoding.

Zrobione.
 5
Author: W.Perrin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-02-11 11:39:43

Musiałem użyć wiersza polecenia Windows powershell zamiast domyślnego (Windowkey + X)

 0
Author: john ktejik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-28 20:09:37

Miałem taki problem na Linuksie. Problem polegał na tym, że nie generowałem lokalizacji. Więc mój wynik locale był w stanie zapisać wszystkie litery "C", bez UTF-8. Aby to rozwiązać, dodałem en_US.UTF-8 i ru_RU.UTF-8 w /etc / locale.gen. następnie uruchamiam localectl set-locale lang=ru_RU.UTF-8 i restart. I przekierowany do systemu. Po tym cirylic był wyświetlany normalnie.

 0
Author: Ashark,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-12-03 19:25:37