Mengapa warna git tidak muncul saat menggunakan arloji?

10

Saat berlari git status -sbsaya melihat:

masukkan deskripsi gambar di sini

Saya ingin watch(dari procps-ng 3.3.3) repositori. The --coloropsi seharusnya untuk menjaga warna.


Menariknya, ini bekerja dengan ls:

$ watch --color "ls --color"

Menunjukkan:

output dari ls


Namun untuk gitwarna hilang:

$ watch --color "git status -sb"

masukkan deskripsi gambar di sini


Jadi, mengapa watchmenunjukkan warna dari lstetapi bukan dari gitoutput?

Drew Noakes
sumber
@ John, terima kasih, saya benar-benar berkomentar di tautan itu sebelum memposting pertanyaan ini :)
Drew Noakes

Jawaban:

5

Pernyataan berikut ini benar:

  • watchmenjalankan perintah di shell baru sh,.
  • .bashrcalias lssebagai ls --color=autountuk mengaktifkan warna.
  • shtidak mewarisi atau menggunakan bashalias.

Jadi ketika watchdijalankan ls, itu tidak meminta warna, itu hanya menjalankan versi lama. Anda dapat menghindari ini tetapi — seperti yang ditunjukkan aditya — Anda juga perlu mengaktifkan warna watchagar dapat memprosesnya dengan benar.

Contoh untuk bekerja lsadalah:

watch --color -- ls --color=always

Jika Anda tidak lulus --coloruntuk menonton, Anda akan melihat banyak kode warna jelek sebaris.


ls --colordiartikan sebagai ls --color=always.

ls --color=auto tidak mencetak warna di arloji. Ini menunjukkan bahwa itu menyimpulkan dukungan warna dari terminal itu sendiri.

Untuk alasan lebih lanjut, kami dapat menguji apakah arloji arloji menganggapnya terminal nyata :

$ bash -c '[[ -t 1 ]] && echo "real terminal"'
real terminal

$ watch -- "bash -c '[[ -t 1 ]] && echo "real terminal"'"
# ... nothing.

Saya menduga bahwa beberapa aplikasi melihat itu (atau serupa) untuk mengetahui apakah mereka harus mengaktifkan warna atau tidak.

Oli
sumber
3
Tetapi OP ingin tahu mengapa ini tidak berhasil git status -sb, meskipun bekerja dengan baik ls --color.
jobin
Ini masuk akal. Namun tidak ada alias untuk git. Warna diatur dalam konfigurasi git secara langsung . Jadi ini sepertinya tidak menjadi masalah alias.
Drew Noakes
Bingo. Saya akan mengatur warna saya autoyang, seperti yang Anda duga dengan benar, menyebabkan git untuk menghindari keluaran warna. Penggunaan alwayssebaliknya telah memecahkan masalah ini. Terimakasih banyak!
Drew Noakes
9

git menggunakan nilai konfigurasi untuk menentukan apakah akan menampilkan keluaran berwarna atau tidak.

Sebagai contoh:

git config --global color.ui auto

Ini mengatur pengaturan warna ke autoglobal. Dalam automode, git akan menentukan apakah itu terminal asli sebelum mengirim kode warna, seperti yang disarankan Oli.

Anda dapat memaksakan nilai global ini always, namun ide yang lebih baik mungkin untuk menerapkannya pada perintah tertentu:

git -c color.status=always status -sb

Menyatukan semuanya:

watch --color git -c color.status=always status -sb
Drew Noakes
sumber
0

Ini berfungsi jika git( --color) dan watch( -c) disuruh menggunakan warna:

watch -cd "git branch -va --color"
sja
sumber