web-dev-qa-db-fra.com

La commande de branche Git se comporte comme "moins"

Lorsque j'utilise la commande git branch pour répertorier toutes les branches, la sortie de git branch | less s'affiche.

La commande git branch est censée afficher une liste de branches, comme le fait ls pour les fichiers.

Voici le résultat obtenu:

 Enter image description here

Comment puis-je obtenir le comportement par défaut de git branch? Qu'est-ce qui cause la sortie paginée?

J'utilise ZSH avec oh_my_zsh (rien pour Git), et mon .gitconfig ressemble à ceci:

[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
157
DenniJensen

Comme mentionné ci-dessus, il s'agissait d'un changement de comportement par défaut introduit dans Git 2.16 .

Vous pouvez désactiver la sortie paginée pour git branch par défaut avec le paramètre pager.branch config :

git config --global pager.branch false
315
Zach Schneider

Comme d'autres réponses l'ont fait remarquer, git se transfère par défaut dans un pager (less par défaut) pour la plupart des commandes.

Un point important, cependant, est que lorsque la variable d’environnement LESS est désactivée, Git le définit sur FRX , ce qui a pour conséquence que le comportement visible de l’utilisateur est identique à celui que le pager n’était pas utilisé lorsque la sortie de la commande est court (c'est-à-dire si vous n'avez que quelques branches) Voir homme moins :

-F ou --quit-si-un-écran
Moins permet de quitter automatiquement si tout le fichier peut être affiché sur le premier écran.

-R ou --RAW-CONTROL-CHARS
[...] Les séquences d'échappement "couleur" ANSI sont générées sous forme "brute".

-X ou --no-init
Désactive l'envoi des chaînes d'initialisation et de désinitialisation de termcap au terminal. Ceci est parfois souhaitable si le La chaîne de désinitialisation fait quelque chose d'inutile, comme effacer le. écran.

Si vous obtenez le comportement que vous décrivez, il est fort probable que $LESS soit réglé sur autre chose, et le réinitialiser permettrait de résoudre le problème tout en conservant le comportement "pageur" ​​pour une sortie longue. Sinon, vous pouvez activer le comportement tout en conservant $LESS en l'état en l'ajoutant à votre fichier .gitconfig:

[core]
    pager = less -FRX

Si vous n'aimez vraiment pas le téléavertisseur, vous pouvez le désactiver globalement ou par commande (voir autres réponses).

20
Matthieu Moy

Ne pas discuter la sémantique, mais le comportement que vous obtenez est le comportement par défaut. C'est pourquoi vous l'obtenez quand vous ne demandez pas quelque chose de différent. Par défaut, branch (et de nombreuses autres commandes git) utilise un pager lors de l'envoi d'une sortie au terminal.

Vous pouvez remplacer cette valeur par défaut en utilisant l'option --no-pager

git --no-pager branch

Ou bien, si vous redirigez la sortie vers un fichier, git devrait détecter qu’il n’écrit pas sur un terminal et ne devrait donc pas utiliser un pager de toute façon. (D'autre part, cela suggère un cas d'utilisation de script, auquel cas vous devriez envisager d'utiliser une commande de plomberie telle que git for-each-ref plutôt que git branch.)

12
Mark Adelsberger

Pour ceux qui veulent mettre à jour leur ~/.gitconfig pour résoudre ce problème, cela ressemble à ceci:

[pager]
   branch = false
4
Nick

ce comportement git était de plus en plus agaçant pour moi aussi . J'ai eu ma liste de balises dans less quand je voulais juste lister les balises par exemple.

Vous pouvez également contrôler ce comportement en modifiant le paramètre par défautGit PAGERen cat au lieu de less. Je préférerais faire défiler dans iTerm que dans l'éditeur. J'aime utiliser l'éditeur quand je veux.

Alors:

git config --global core.pager cat

J'espère que ça aide.

3
ionescu77

La commande de branche Git se comporte comme "moins"

Parce que git par défaut ouvre la sortie dans pager (au moins dans ubuntu). La réponse acceptée remplacera complètement le pager, ce qui risque de ne pas vous plaire si votre sortie est très longue.

Je recommanderais de remplacer le pageur par less afin qu'il ne produise pas de "défilement" moins que la hauteur du terminal.

git config --global --replace-all core.pager "less -F -X"

2
Imran

Faites ce qui suit:

[alias]
  br = !git --no-pager branch
1
João Tiago

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

GIT_PAGER contrôle le programme utilisé pour afficher une sortie de plusieurs pages sur la ligne de commande. Si ceci n'est pas défini, PAGER sera utilisé comme solution de secours.

Pour résoudre votre problème, vous pouvez désactiver PAGER et GIT_PAGER dans votre shell.

0
C-Otto