Il comando Git branch si comporta come ‘less’

Quando uso il comando git branch per elencare tutti i rami, vedo l’output di git branch | less git branch | less .

Il comando git branch dovrebbe mostrare un elenco di rami, come ls fa per i file.

Questo è l’output che ottengo:

Inserisci qui la descrizione dell'immagine

Come ottengo il comportamento predefinito del git branch ? Cosa causa l’uscita paginata?

    Sto usando ZSH con oh_my_zsh (niente per Git in là), e il mio .gitconfig questo aspetto:

     [user] email = [email protected] name = Dennis Haegler [push] default = simple [merge] tool = vimdiff [core] editor = nvim excludesfile = /Users/dennish/.gitignore_global [color] ui = true [alias] br = branch ci = commit -v cam = commit -am co = checkout df = diff st = status sa = stash mt = mergetool cp = cherry-pick pl = pull --rebase [difftool "sourcetree"] cmd = opendiff \"$LOCAL\" \"$REMOTE\" [mergetool "sourcetree"] cmd = /Applications/SourceTree.app/Contents/Resources/opendiff-w.sh \"$LOCAL\" \"$REMOTE\" -ancestor \"$BASE\" -merge \"$MERGED\" trustExitCode = true 

    Come accennato in precedenza, questo era un cambiamento di comportamento predefinito introdotto in Git 2.16 .

    Per impostazione predefinita, è ansible distriggersre l’uscita cercapersone per il git branch con l’ impostazione di configurazione pager.branch :

     git config --global pager.branch false 

    Come indicato da altre risposte, git fa il default per eseguire il piping stesso in un cercapersone ( less di default) per la maggior parte dei comandi.

    Un punto importante, tuttavia, è che quando la variabile di ambiente LESS non è impostata, Git la imposta su FRX , e la conseguenza è che il comportamento visibile all’utente è lo stesso che se il cercapersone non fosse usato quando l’output del comando è breve (es. se hai solo pochi rami). Vedi meno uomo :

    -F o – buon-se-uno-schermo
    Fa sì che meno esca automaticamente se l’intero file può essere visualizzato nella prima schermata.

    -R o –RAW-CONTROL-CHARS
    […] Le sequenze di escape “a colors” ANSI vengono visualizzate in forma “raw”.

    -X o –no-init
    Disabilita l’invio delle stringhe di inizializzazione e deinitializzazione del termcap al terminale. A volte ciò è desiderabile se la stringa di deinitializzazione fa qualcosa di non necessario, come la pulizia dello schermo.

    Se ottieni il comportamento che descrivi, molto probabilmente hai $LESS impostato su qualcos’altro, e disinserendo il sistema si eliminerebbe il problema mantenendo il comportamento del “cercapersone” per un output lungo. In alternativa, puoi triggersre il comportamento mantenendo $LESS as-is aggiungendo questo al tuo file .gitconfig :

     [core] pager = less -FRX 

    Se non ti piace la cosa del cercapersone, puoi distriggersrla globalmente o in base al comando (vedi altre risposte).

    Non per argomentare la semantica, ma il comportamento che ottieni è quello predefinito. Ecco perché lo ottieni quando non chiedi qualcosa di diverso. Per impostazione predefinita, branch (e numerosi altri comandi git) usano un cercapersone quando inviano l’output al terminale.

    È ansible sovrascrivere questo valore predefinito usando l’opzione --no-pager

     git --no-pager branch 

    O se si reindirizza l’output a un file, git dovrebbe rilevare che non sta scrivendo su un terminale e quindi non dovrebbe comunque usare un cercapersone. (D’altra parte, ciò suggerisce un caso d’uso di script, nel qual caso dovresti considerare di usare un comando plumbing come git for-each-ref in preferenza per git branch .)

    https://git-scm.com/book/gr/v2/Git-Internals-Environment-Variables

    GIT_PAGER controlla il programma utilizzato per visualizzare l’output multipagina sulla riga di comando. Se non è impostato, PAGER verrà utilizzato come riserva.

    Per risolvere il tuo problema, potresti rimuovere PAGER e GIT_PAGER nella tua shell.