Perché i colori git non appaiono quando si usa l'orologio?


10

Quando corro git status -sbvedo:

inserisci qui la descrizione dell'immagine

Voglio watch(da procps-ng 3.3.3) un repository. L' --coloropzione dovrebbe mantenere i colori.


È interessante notare che funziona con ls:

$ watch --color "ls --color"

Mostrando:

uscita da ls


Tuttavia per giti colori scompaiono:

$ watch --color "git status -sb"

inserisci qui la descrizione dell'immagine


Quindi, perché watchmostra i colori dall'output lsma non gitdall'output?



@Jobin, grazie, ho effettivamente commentato quel link prima di pubblicare questa domanda :)
Drew Noakes,

Risposte:


5

Le seguenti affermazioni sono vere:

  • watchesegue il comando in una nuova shell, sh.
  • .bashrcalias lsda ls --color=autoabilitare i colori.
  • shnon eredita o usa bashalias.

Quindi, quando watchviene eseguito ls, non richiede colori, esegue semplicemente la vecchia versione normale. Puoi aggirare questo, ma - come sottolinea Aditya - devi anche abilitare i colori watchaffinché possano elaborarli correttamente.

Un esempio funzionante per lsè:

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

Se non passi --colorper guardare, vedrai un mucchio di brutti codici colore in linea.


ls --colorè interpretato come ls --color=always.

ls --color=auto non stampa il colore nell'orologio. Ciò suggerisce che sta inferendo il supporto del colore dal terminale stesso.

Per ulteriori informazioni sul motivo, possiamo testare se il guscio dell'orologio pensa che sia un vero terminale :

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

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

Sospetto che alcune applicazioni lo stiano osservando (o simili) per dire se dovrebbero attivare i colori o meno.


3
Ma l'OP vuole sapere perché non funziona git status -sb, anche se funziona ls --color.
Jobin

Questo ha senso. Tuttavia, non esiste un alias per git. La colorazione è impostata direttamente nella configurazione di git . Quindi questo non sembra essere un problema di aliasing.
Drew Noakes,

Bingo. Impostarei i miei colori su autocui, come hai giustamente ipotizzato, stavo causando a git di evitare l'output del colore. L'utilizzo alwaysinvece ha risolto questo problema. Grazie molto!
Drew Noakes,

9

git utilizza un valore di configurazione per determinare se mostrare o meno un output colorato.

Per esempio:

git config --global color.ui auto

Questo imposta l'impostazione del colore su autoglobalmente. In automodalità, git determinerà se si tratta di un vero terminale prima di inviare codici colore, come suggerito da Oli.

È possibile forzare questo valore globale always, tuttavia un'idea migliore potrebbe essere quella di applicarlo a un comando specifico:

git -c color.status=always status -sb

Mettere tutto insieme:

watch --color git -c color.status=always status -sb

0

Funziona se si dice git( --color) e watch( -c) di usare i colori:

watch -cd "git branch -va --color"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.