Pourquoi moins est exécuté inutilement par git?


22

Lorsque je lance git branch(depuis bash ou csh), il dirige automatiquement la sortie less. Cependant, avec seulement quelques branches dans le référentiel, cela n'est pas nécessaire, c'est ennuyeux, car la liste des branches disparaît une fois que je quitte moins.

La vérification du ~/.gitconfigfichier et des .git/configfichiers locaux ne trouve rien sur un téléavertisseur ou autre chose qui pourrait provoquer cela. Sinon, rien de ce que j'ai trouvé dans les recherches sur le Web n'a été utile ou prometteur.

Pourquoi cela se produit-il, et que puis-je faire (le cas échéant) pour faire lesscourir en cas de besoin (par exemple, quand on fait un git logquand il y a beaucoup d'histoire) mais pas autrement (comme un git branchavec seulement 2 ou 3 branches)?


4
En général, git ne sait pas combien il y aura de sortie à partir d'une commande, il envoie donc tout par défaut via un pager, ce qui sera probablement moins.
icarus

6
La première chose à faire sur une nouvelle installation de -nix est de mettre export LESS=-Xle fichier .profile. Cela évite moins de "nettoyer" l'écran. Je déteste que le réglage standard efface l'écran car j'ai souvent besoin de couper et coller des trucs ou de l'utiliser comme référence.
Peter - Réintègre Monica

3
@Peter Pour être clair (sans jeu de mots), seules les personnes qui ne veulent pas le comportement de nettoyage d'écran devraient le faire.
David Z

@icarus: Cela semble logique. Cependant, mon comportement a changé récemment. Je ne sais pas pourquoi - probablement un changement à une variable d'environnement forcé des gens de la sécurité d'entreprise "en haut" qui ne semblent pas se soucier de la difficulté à rendre les emplois de tous les autres. Quoi qu'il en soit, git est soudainement passé de ce que je considérais comme un comportement sensé à l'exécution de sorties sur une seule ligne à travers moins de telle manière que la sortie était perdue lorsque je m'arrêtais moins.
GreenMatt

Si le comportement a récemment changé, il est au moins possible qu'un paramètre de la variable LESS ait été ajouté aux fichiers de démarrage du shell à l'échelle du système, par exemple / etc / profile, /etc/profile.d/*, /etc/bash.bashrc, Avez-vous cette variable dans votre environnement?
icarus

Réponses:


35

Vous pouvez définir les éléments suivants:

git config --global core.pager 'less -FRX'

Cela garantira que la lessvolonté

  • Quittez si le fichier entier peut être affiché sur le premier écran ( F)
  • Sortie des caractères de contrôle bruts pour le formatage du terminal ( R)
  • Hacher les longues lignes ( S)
  • N'envoyez pas les chaînes init / de-init au terminal - évite d'effacer l'écran à la sortie ( X)

Edit: Suppression de l' Soption basée sur le commentaire de Peter A. Scheider


7
et omettez le --globalsi vous souhaitez qu'il s'applique uniquement au référentiel actuel.
mosvy

8
Définir la variable d'environnement LESSsur -FR, ajouter X et S au goût est une autre façon.
icarus


11
Le PO trouve très probablement ce comportement ennuyeux en général; Je suppose que l'on pourrait définir la variable d'environnement export PAGER='less -FRSX'et que git l'honorerait (en l'absence d'une configuration git spécifique). Btw, -Sest dangereux car il rejette silencieusement la sortie.
Peter - Réintègre Monica

4

Il y a ici d'excellentes réponses pour lessle comportement de tuning , mais comme mes doigts à la barbe grise sont habitués à taper |morequand je le veux, et comme je suis toujours plus en phase avec mercurial qu'avec git, je suis passionné par

git config --global core.pager cat

3
La page de manuel pour git-configindique que la valeur de core.pagerest destinée à être interprétée par le shell. Lorsque vous le définissez sur no, il essaie d'exécuter la commande no, qui n'existe probablement pas, puis il revient simplement à la sortie du contenu. Vous verrez toujours un message d'erreur en tête. Ce que vous voulez probablement faire, c'est le régler à la catplace.
QIS

1
C'est une bonne information, mais ce que j'aime, c'est qu'elle n'exécute rien . Le catest inutile, et je ne fais pas particulièrement confiance aux mainteneurs Linux pour ne pas changer ce que fait cat (cf. la lsdébâcle des fichiers cités ). Peut-être devrais-je plutôt utiliser "ne jamais". Il est moins probable qu'un tel programme existe.
dgc

7
La définition core.pagerde la chaîne vide ( git config core.pager '') ou de necat lancera rien du tout. Vous pouvez le faire vous-même si vous ne me croyez pas ;-) Il n'y a aucune raison de le régler sur une commande factice comme . no
mosvy

Grand merci! Je n'avais aucune idée que la chaîne vide ne provoquerait aucune exécution de commande. Quant à cat, dites-vous que git a un cas particulier pour cette chaîne dans le code du pager - c'est-à-dire qu'il cats'agit effectivement d'un synonyme de "null"? Je m'attendrais à ce qu'il s'exécute cat.
dgc

Cela semble effectivement être le cas. Egads. Mais aussi bien: je cherche toujours plus de moyens de justifier mon dégoût pour Git.
dgc
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.