765 votes

La commande de branche de Git se comporte comme 'less'.

Lorsque j'utilise le git branch pour lister toutes les branches, je vois la sortie de git branch | less .

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

Voici le résultat que j'obtiens :

Enter image description here

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

J'utilise ZSH avec oh_my_zsh (rien pour Git là-dedans), et ma .gitconfig ressemble à ça :

[user]
  email = myemail@mail.com
  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

1321voto

Zach Schneider Points 5031

Comme mentionné dans commentaires sur la réponse de Mark Adelsberger c'était un changement de comportement par défaut introduit dans Git 2.16 .

Vous pouvez activer la sortie paginée pour git branch par défaut avec l'option pager.branch paramètre de configuration :

git config --global pager.branch false

283 votes

C'est une étrange, étrange décision de faire un défaut. Je m'attends à ce que mes outils cli unixy se comportent comme des programmes simples et stupides que vous pouvez enchaîner si vous le souhaitez, mais je suppose que cette discussion est pour un autre site.

13 votes

@Stragulus Notez que la nouvelle valeur par défaut ne vous empêche pas d'enchaîner les éléments suivants git branch avec quelque chose d'autre. Utilisation de détection des tuyaux Git affichera la liste des branches sur stdout dans les commandes suivantes git branch > branches.txt o git branch | wc -l .

4 votes

@RoryO'Kane mais avec le pager, j'ai un type un supplémentaire ESC/q après un simple git branch vérifier.

112voto

Matthieu Moy Points 5947

Comme d'autres réponses l'ont souligné, Git se place 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 n'est pas définie, Git la définit comme FRX La conséquence est que le comportement visible par l'utilisateur est le même que si le pager n'était pas utilisé lorsque la sortie de la commande est courte (c'est-à-dire si vous avez seulement quelques branches). Voir homme moins :

-F ou --quit-if-one-screen
Provoque la sortie automatique de less si le fichier entier peut être affiché sur le premier écran.

-R ou --RAW-CONTROL-CHARS
[...] Les séquences d'échappement ANSI "couleur" sont produites 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 la désinitialisation fait quelque chose d'inutile, comme effacer l'écran. l'écran.

Si vous obtenez le comportement que vous décrivez, vous avez très probablement $LESS à quelque chose d'autre, et le désengager ( unset LESS ) permettrait de se débarrasser du problème tout en conservant le comportement "pager" pour les sorties longues. Alternativement, vous pouvez activer le comportement pour tout en gardant l'option $LESS tel quel en ajoutant ceci à votre .gitconfig fichier :

[core]
    pager = less -FRX

Si vous n'aimez vraiment pas le pager, vous pouvez le désactiver globalement ou sur une base par commande (voir les autres réponses).

1 votes

J'avais pager = less -FR comme l'option X semble désactiver le défilement de la souris.

10 votes

Une doublure git config --global core.pager "less -FRX"

103voto

Mark Adelsberger Points 20504

Je ne veux pas débattre de la sémantique, mais le comportement que vous obtenez est le 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) utilisent un pager lors de l'envoi de la sortie vers le terminal.

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

git --no-pager branch

Ou si vous redirigez la sortie vers un fichier, Git devrait détecter qu'il n'écrit pas dans un terminal et ne devrait donc pas utiliser de pager. (D'un autre côté, cela suggère un cas d'utilisation de script, auquel cas vous devriez envisager d'utiliser une commande de plomberie comme git for-each-ref de préférence à git branch .)

0 votes

git --no-pager branch travaux. Mais comment cela se passe-t-il ? Seul le PAGER est définie comme suit less . Ce n'est pas le comportement par défaut. Tous mes collèges ont une sortie sous forme de liste imprimée dans le terminal.

0 votes

Quelle version de git utilisez-vous ? Et quelle version vos collègues utilisent-ils ?

0 votes

2.16.0 ! Est-ce une fonctionnalité introduite dans git dans cette version ?

69voto

ionescu77 Points 133

Ce comportement de Git était de plus en plus ennuyeux pour moi aussi. J'avais ma liste de balises dans less lorsque l'on veut simplement lister les tags par exemple.

On peut également contrôler ce comportement en modifiant la valeur par défaut de l'option Git PAGER à cat au lieu de less . Je préfère défiler dans iTerm que dans un éditeur. J'aime utiliser l'éditeur quand je le veux.

Donc :

git config --global core.pager cat

4 votes

Oui, cela devrait être une réponse valable pour moi

3 votes

Merci de m'avoir prévenu. J'admets qu'après quelques mois d'utilisation, j'utilise toujours cat, mais par exemple, lorsque je fais git log c'est ennuyeux. Le comportement original me manque, mais je n'ai pas eu le temps d'améliorer mon flux de travail quotidien dans cette perspective.

0 votes

Vous gagnez ... Parfait !

16voto

Nick Points 2909

Pour ceux qui veulent mettre à jour leur ~/.gitconfig pour résoudre ce problème, ça ressemblerait à ça :

[pager]
   branch = false

0 votes

Une chose étrange ici : ce paramètre fonctionnait et depuis quelques jours il ne fonctionne plus, est-ce que quelque chose a changé ou est-ce que ma configuration n'est simplement pas appliquée ?

0 votes

@ConquerorsHaki Cette solution fonctionne pour moi avec git v2.17.1 Essayer git config --list --show-origin pour déboguer les paramètres qui sont/ne sont pas définis pour vous/votre système et d'où ( stackoverflow.com/q/12254076/1590950 ).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X