Mengapa git diff di Windows memperingatkan bahwa "terminal tidak berfungsi sepenuhnya"?

111

Saya menggunakan msysgit 1.7.7.1 di Windows. Saya mendapatkan kesalahan saat menggunakan git diff. Apa penyebabnya? Apakah tidak ada alat diff yang disertakan dalam msysgit? Apa yang harus saya lakukan?

PERINGATAN: terminal tidak berfungsi penuh

Portaljacker
sumber
1
Sebuah solusi yang mungkin: kizzx2.com/blog/index.php/2009/01/07/...
Mr_Spock
Ok, msysgit menggunakan git, itu seperti namanya. Jadi saya mengikutinya dengan istilah msys dan itu berhasil! Posting penjelasan dalam jawaban yang diformat dengan baik sehingga saya dapat memberi Anda perwakilan!
Portaljacker
di PowerShell run: $ env: Term = "xterm"
Anton Soradoi

Jawaban:

62

Untuk Git Bash, ini bisa diperbaiki dengan menambahkan baris berikut ke ~ / .bashrc:

export TERM=cygwin

-atau-

export TERM=msys

Yang pertama tampaknya asli oleh git untuk windows, yang kedua adalah bentuk yang dikenal populer untuk "menyembuhkan" juga.

Masalah dapat disebabkan jika beberapa program lain (seperti misalnya Strawberry Perl ) menetapkan TERMvariabel lingkungan sistem.

http://code.google.com/p/msysgit/issues/detail?id=184

manojlds
sumber
Ya, tetapi tidak ada file seperti itu di pohon file untuk git. Jawaban lainnya berhasil dan masuk akal.
Portaljacker
1
@Portaljacker - Apa maksud Anda bekerja? Tutup git bash, buka lagi dan lihat apakah masih berfungsi?
manojlds
4
Ya, di jendela pengaturan variabel lingkungan melalui set atau GUI (pengaturan lanjutan seperti yang ditunjukkan pada jawaban lain) adalah cara yang harus dilakukan.
cgp
11
Jawaban ini kurang memuaskan karena OP tidak mengatakan dia menggunakan bash dan tidak ada persyaratan bahwa git harus dijalankan dari bash. Secara pribadi saya menggunakan Windows Command Prompt dan saya menginginkan solusi yang berfungsi untuk lingkungan itu.
David Grayson
7
@DavidGrayson Thread necro, saya tahu, tetapi Anda dapat melakukan hal yang sama di Command Prompt Windows dengan menggunakan setx TERM msys. SETX(bukan hanya SET) menulis variabel env ke registri.
rossipedia
184

Jika Anda mengalami masalah dalam cmd.exe, misalnya, lihat peringatan di sini:

CMD.EXE tanpa TERM disetel dengan benar

Kemudian atur variabel lingkungan Anda dan sertakan TERM = msys. Setelah itu, setiap kali Anda membuka cmd.exe, variabel Anda akan disetel dengan benar.

Cara menyetel variabel lingkungan TERM Anda

SEKARANG ANDA HARUS MEMULAI ULANG SHELL (CMD.EXE). Jalankan saja yang baru. Dan dari sana, Anda seharusnya tidak memiliki masalah lagi. Lagi:

CMD.EXE dengan set TERM yang benar

teleball
sumber
Ya, ini pasti. Saya dalam vista, dan itu benar-benar menyelesaikannya. Terima kasih teleball!
J Cole Morrison
2
Adakah ide dari mana masalah ini berasal atau apa arti pesan ini ?
Anthony Mastrean
7
@AnthonyMastrean itu berarti terminal tidak mendukung penulisan ke lokasi berbeda di jendela terminal. Git diff ingin menulis di seluruh jendela, misalnya untuk menulis layar berikutnya, tanpa melakukan jutaan spasi mundur untuk menempatkan kursor di tempat yang tepat setiap saat.
jwg
Karena program tidak berubah, masalah sebenarnya bukanlah dukungan terminal, itu adalah git (tepatnya kurang) telah dibodohi oleh program lain yang mendefinisikan variabel TERM sebagai beberapa istilah dasar, seperti yang ditunjukkan @manojlds.
albfan
2
Jika Anda menggunakan Vagrant, perbaikan ini menyebabkan masalah dengan bash shell. Misalnya nano tidak lagi berfungsi, memberikan kesalahan: 'msys': tipe terminal tidak diketahui
Sirrah
16

Jawaban di atas tidak sepenuhnya berhasil untuk saya, jadi saya lakukan: Tambahkan

export TERM=msys 

ke " [githome] / etc / profile " di bagian atas tetapi hanya membuat perubahan untuk git bash. Lalu saya menambahkan

@set TERM=msys

ke " [githome] /cmd/git.cmd " setelah @setlocal (Saya hanya menginstal git yang dijalankan dari baris perintah). Mungkin keputusan ini tidak benar-benar bagus tetapi berhasil untuk saya dan tidak ada peringatan terminal. (Saya menggunakan git versi 1.7.10.msysgit.1).

Anatoly R
sumber
2
Untuk windows, saya hanya perlu mengatur variabel lingkungan TERM ke msys, yang dapat dilakukan melalui SETX.
cgp
14

Jawabannya dapat ditemukan di sini , di mana penulis solusi mengklaim bahwa:

variabel lingkungan TERMditetapkan kedumb

itu bukan

TERM=cygwin

Anda dapat mengubahnya menjadi

TERM=msys

untuk memecahkan masalah yang dihadapi.

Mr_Spock
sumber
Ternyata jawaban ini hanya berfungsi untuk sesi gitbash saat ini, harus mengubahnya ke jawaban lain.
Portaljacker
6

Saya bekerja di PowerShell dan saya memiliki git yang dapat dieksekusi langsung di jalur saya.

Tidak satu pun dari jawaban yang disarankan berhasil, tetapi saya menemukan solusi yang berhasil untuk saya.

Saya menambahkan garis di profil PowerShell saya:

$env:TERM="msys"

Yang memperbaiki masalah saya.

John Weldon
sumber
Ini tampaknya tidak menjadi masalah bagi saya lagi menggunakan git versi 1.7.11.msysgit.1 Saya dapat menghapus $ env: TERM = "msys" dan mengaktifkan kembali ekstensi warna secara lincah tanpa masalah.
John Weldon
Konflik dengan aplikasi lain yang menggunakan terminal berbeda adalah alasan mengapa Anda harus mengikuti jawaban manojlds dan menyetel TERM di .bashrc milik Git Bash daripada mengubah variabel lingkungan di sini, yang akan mempengaruhi semua program.
jwg
1
@jwg poin yang bagus, tetapi saya menggunakan git sepanjang waktu dan saya lebih suka PowerShell daripada bash, jadi harus menjalankan bash hanya untuk mendapatkan keluaran warna terlalu berlebihan bagi saya.
John Weldon
Saya menambahkan ini ke profil cmder..ps1 saya alih-alih profil PowerShell umum saya.
gerrard00
6

Solusi cepat & kotor dalam kasus saya ternyata menggunakan --no-pageropsi.

Secara default, beberapa perintah git (like log) akan menggunakan pager seperti lessjika mereka mengharapkan keluaran yang panjang. Pager memerlukan hal-hal seperti menggulir teks ke atas dan ke bawah dengan tombol panah, yang terkadang tidak berfungsi jika asumsi tentang jenis terminal yang Anda gunakan salah (inilah yang dimaksud dengan "tidak berfungsi penuh").

Jika Anda mengetahui sebelumnya bahwa output Anda akan pendek, atau Anda hanya ingin membuang output ke terminal dan membiarkan program menggulir ke atas ke program terminal Anda, Anda dapat menimpa ini dan tidak menggunakan pager sama sekali, misalnya:

git --no-pager log
Felix
sumber
0

Jika seseorang mendapatkan bash peluncuran ini dari Ekstensi Git, periksa pengaturan untuk Path to linux tools.... Punyaku diatur ke C:\cygwin. Mengubahnya menjadi C:\Program Files (x86)\Git\bin\memperbaikinya untuk saya. Saya tidak perlu menyetel variabel TERM untuk meluncurkan bash dengan cara ini.

Tanah liat
sumber