Windows 10 komut isteminde git log çıktı kodlama sorunları


89

Sorun

git logWindows komut isteminde komut çıktısının düzgün görüntülenmesini nasıl sağlayabilirim ?

Misal

soruna yol açan git komutları dizisi Gördüğünüz gibi aksanlı karakterleri düzgün yazabiliyorum ama git logçıktı bir şekilde kaçtı. UTF-8Kodlama tablosuna göre çıktıdan gelen açılı parantezler ( <ve >) arasındaki kodlar önceden yazılan git configparametrelere karşılık gelir .

LESSCHARSETOrtam değişkenini, benzer sorun için cevaplardan birinde uygun utf-8olarak ayarlamaya çalıştım, ancak çıktı bozuk:

LESSCHARSET = utf8 ayarlandıktan sonra git log çıktısı

Beklendiği gibi işlendiği gibi .git/configdoğru şekilde kodlandığını biliyorum .utf-8gitk

Uygun gitk çıktısı

localeGerekirse komut çıktısı burada

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=

DÜZENLE:

Çıktı, saf git-bash'da da aynıdır :

görüntü açıklamasını buraya girin

bu yüzden sorunun kabuktan bağımsız olduğuna ve Git veya yapılandırmasının kendisiyle ilgili olduğuna inanıyorum.



Evet, 65001 (UTF-8) dahil olmak üzere birkaç kod sayfasını hiçbir sonuç almadan denedim. Görünüşe göre chcp komutunun git log çıktısının nasıl görüntüleneceği üzerinde hiçbir etkisi yok. Her zaman aynı şekilde görüntülenir.
Marcin Kłopotek

1
Soru aptalca geliyorsa özür dilerim, ama neden Git Bash yerine Windows komut istemini kullanıyorsunuz? Git kullanmak için daha uygundur, pencere tam ekrana kadar yeniden
boyutlandırılabilir

Aptalca @kriegaex değil, aslında iyi. Günlük kullanım için ConEmu'ya sarılmış git-bash kullanıyorum. Sonuç aynı i.imgur.com/hMKz9D3r.png olur . Sorunun kabuktan bağımsız olduğuna ve Git veya yapılandırmasının kendisi ile ilgili olduğuna inandığım için, insanları kullandığım diğer bağımlı araçlarla karıştırmamak için cmd.exe ile örnekler vererek sorunumu açıkladım.
Marcin Kłopotek

Yanıtlar:


159

Tamam, biraz deney yaptım ve Windows Git komutlarının Lehçe'yi LC_ALL(veya diğer UTF-8 karakterlerini) doğru şekilde görüntülemek için olduğu gibi aslında UNIX değişkenlerine ihtiyaç duyduğunu öğrendim . Sadece şu komutu deneyin:

set LC_ALL=C.UTF-8

O halde sonucun tadını çıkarın. Konsolumda olanlar ("Consolas" yazı tipi, chcpgerekli değil):

Windows konsolu CMD


Güncelleme:

  • type(Konsolda dosya göster) gibi Windows komutlarının düzgün çalışması için ihtiyacınız var chcp 65001.
  • Ve eğer Git Bash'in komutlarını tercih catederseniz, yukarıda bahsedilenlerden faydalanabilirsiniz set LC_ALL=C.UTF-8.

Windows konsolu CMD, bölüm 2


2. Güncelleme: Değişiklikler nasıl kalıcı hale getirilir?

Kullanıcı mono blaine'in dediği gibi, bir ortam değişkeni oluşturun LC_ALLve bunu C.UTF-8küresel olarak veya yalnızca kendi kullanıcı profiliniz için atayın (Almanca ekran görüntüsü için özür dilerim):

Ortam değişkeni oluştur

Bir sonraki sefer bir komut işlemcisi konsolunu (cmd.exe) açtığınızda, komutu verirken değişken değerini görmelisiniz echo %LC_ALL%. PowerShell'de bunu yayınlarken görmelisiniz $env:LC_ALL.

UTF-8 kod sayfasını kalıcı hale getirmenin en basit yolu, bölüme string türünde regeedityeni bir değer açıp eklemek ve ona değer atamaktır .AutorunHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processorchcp 65001

Kayıt editörü

Bundan böyle, yeni bir cmd.exe konsolunu her açtığınızda bu komut çalıştırılacaktır. Çıktısını yeni pencerede bile görebilirsiniz: "Aktive Codepage: 65001." (veya kendi dilinizde benzer).

Oh, bu arada: UTF-8 kodlu bir dosyayı PowerShell'de doğru şekilde görüntülemek için Get-Content -encoding UTF8 file.txtveya cat -encoding UTF8 file.txt( PowerShell'de cattakma ad olarak Get-Content) kullanabilirsiniz.


Küme LC_ALLgit'in kendisi tarafından gerekli değildir. lessVarsayılan çağrı cihazı olan git installaion benzeri diğer araçlar / see core.pagerLC_ALL değeri kullanıyor . Diğer geçerli değerler yerelleştirilmiş dildir, örneğin: LC_ALL=de_DE.UTF-8Almanlar için.
dönüş 42

1
ortam değişkenini komut setx LC_ALL C.UTF-8
anion

Powershell 6, ConEmu'da eklemek $env.LC_ALL='ClUTF-8'için yeterliydi$Profile
Andrew Spencer

67

PowerShell eşdeğeriyle ilgilenen varsa set LC_ALL=C.UTF-8, bu:

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

Ancak bu yalnızca mevcut oturum için çalışır. Kalıcı hale getirmek için iki olasılık:

  • LC_ALLdeğerle adlandırılmış bir ortam değişkeni oluşturunC.UTF-8
  • ya koymak $env:LC_ALL='C.UTF-8'senin içinde $Profiledosyanın

1
Veya bunu PowerShell profilinize ekleyin (bunu global ayara tercih ederim çünkü aynı profili birden çok makinede git aracılığıyla kullanıyorum).
Richard

3
Profil dosyası, örneğin şu şekilde düzenlenebilir: notepad $ profile Sonra mono blaine'in önerdiği bir yere bir satır ekleyin, $ env: LC_ALL = 'C.UTF-8'
Tore Aurstad

Windows 10'da PowerShell 6 + ConEmu ile: bu işe yarıyor, başka hiçbir şeye gerek yoktu
Andrew Spencer

6

Ben kullanıyorum Git aracılığıyla Powershell Çekirdek v7.0.3 ile lüks-git içine monte Windows Terminal , Windows 10.

Cevaplara göz attım ve birçoğunu denedim. Benim için işe yarayan çözümler şunlardı:

Bu çözümlerin ikisi de ayrı ayrı çalışır. Sorun Git ile ilgili göründüğü için Git komutunu kullanmayı seçtim ve Powershell profili daha temiz kalıyor.


Git ayarı için teşekkürler. Git ayarları benim için çalışıyor, ancak aynı zamanda ayarın $env:LESSCHARSET='utf-8'Windows Terminal'deki PowerShell 5 için de iyi çalıştığını buldu .
mloskot

5

Kullandığım git bashüzerinde WIN10. Bana gelince, 4 ayar beklentim gibi görünüyor.

  • envayarı. Ekle LC_ALL=C.UTF-8, LESSCHARSET=UTF-8için PATHküresel ölçekte.

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

  • git bashayarı. Set Options-> Text-> Character setiçin utf-8. Veya set localeve Character sether ikisine de default. Doğru olanı seçecek kadar akıllı encoding.

Bitti.


gitWindows komut isteminde kullanıyorum ve ilk iki adım, durumum için sorunu çözdü.
nglee

0

Varsayılan olan yerine Windows powershell komut istemini kullanmak zorunda kaldım (Windowkey + X)


0

Linux'ta böyle bir sorun yaşadım. Ve sorun şu ki, yerel ayarlar oluşturmadım. Bu yüzden localeçıktım, UTF-8 olmadan tüm "C" harflerini cantaining oldu. Bunu çözmek için yorum yazmadım en_US.UTF-8ve ru_RU.UTF-8/etc/locale.gen. Sonra localectl set-locale LANG = ru_RU.UTF-8 komutunu çalıştırdım ve yeniden başlattım. Ve sisteme yeniden girildi. Bundan sonra dairesel olarak normal görüntülendi.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.