Question Comment empêcher git diff d'utiliser un pager?


Y a-t-il un commutateur de ligne de commande à transmettre à git diff et d'autres commandes qui utilisent le less pager par défaut?

Je sais que je peux le diriger vers cat, mais cela supprime toute la coloration syntaxique.

Je sais que je peux définir le pager dans le global .gitconfig à chat par GITPAGER=cat (ou quelque chose comme ça); mais je veux parfois avoir un pager (en fonction de la taille du diff).

Mais, je préférerais un commutateur de ligne de commande s'il y en a un; et je ne suis pas en mesure de trouver un, en passant par les pages man.


438
2018-02-02 12:22


origine


Réponses:


--no-pager à git lui dira de ne pas utiliser un téléavertisseur. Passer l'option -F moins le dira de ne pas page si la sortie tient dans un seul écran.

Usage:

git --no-pager diff

Parmi les autres options disponibles dans les commentaires:

# set an evaporating environment variable to use cat for your pager
GIT_PAGER=cat git diff

# tell less not to paginate if less than a page
export LESS="-F -X $LESS"
# ...then git as usual
git diff

484
2018-02-02 12:25



Comme une réponse précédente mentionnée, en passant le -F l'option à moins l'amène à quitter si le contenu est inférieur à un écran, mais après cela, l'écran est réinitialisé et vous finissez par ne pas voir le contenu, le -X option supprime ce comportement. Donc, j'utilise les éléments suivants pour activer la pagination conditionnelle en fonction de la quantité de contenu:

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

183
2018-01-02 06:53



Utilisation

git config --global core.pager cat

se débarrasser de pager pour toutes les commandes pour tous les dépôts.

Vous pouvez également désactiver la pagination pour des sous-commandes git uniques en utilisant pager.<cmd> réglage au lieu de core.pager et vous pouvez modifier vos paramètres par dépôt git (omettre --global).

Voir man git-config et rechercher pager.<cmd> pour plus de détails.


116
2017-08-08 17:43



Les changements récents dans la documentation mentionnent une manière différente de supprimer une option par défaut pour less ("options par défaut" étant FRSX).

Pour cette question, ce serait (git 1.8+)

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

Par exemple, Dirk Bester suggère dans les commentaires:

export LESS="$LESS -FRXK" 

pour que je reçoive diff coloré avec Ctrl-C quitter less.

Wilson F mentions dans les commentaires et en sa question cette:

moins prend en charge le défilement horizontal, donc quand les lignes sont coupées, moins désactive quitter-si-un-écran afin que l'utilisateur puisse toujours faire défiler le texte vers la gauche pour voir ce qui a été coupé.


Ces modifications étaient déjà visibles dans git 1.8.x, comme illustré dans "Toujours utiliser le pager pour git diff"(voir les commentaires). Mais la documentation vient d'être reformulée (pour git 1.8.5 ou 1.9, Q4 2013).

Visionneur de texte à utiliser par les commandes Git (par exemple, «moins»).
  La valeur est destinée à être interprétée par le shell.

L'ordre de préférence est:

  • la $GIT_PAGER variable d'environnement,
  • puis core.pager configuration,
  • puis $PAGER,
  • puis la valeur par défaut choisie à la compilation (généralement 'less').

Quand le LESS La variable d'environnement n'est pas définie, Git la définit sur FRSX
  (si LESS la variable d'environnement est définie, Git ne la change pas du tout).

Si vous souhaitez remplacer de manière sélective le paramètre par défaut de Git pour LESS, vous pouvez définir core.pager par exemple less -+S.
  Ceci sera transmis au shell par Git, qui traduira la commande finale en LESS=FRSX less -+S. L'environnement indique à la commande de définir le S option pour couper les longues lignes mais la ligne de commande le réinitialise à la valeur par défaut pour plier les longues lignes.


Voir commettre 97d01f2a pour la raison derrière la nouvelle formulation de la documentation:

config: réécrire core.pager Documentation

Le texte mentionne core.pager et GIT_PAGER sans donner l'image globale de la préséance. Emprunter une meilleure description de la git var(1) Documentation.

L'utilisation du mécanisme pour autoriser les fichiers de configuration à l'échelle du système, globaux et par référentiel ne se limite pas à cette variable particulière. Retirez-le pour clarifier le paragraphe.

Réécrire la partie qui explique comment la variable d'environnement LESS est défini sur la valeur par défaut de Git et sur la manière de le personnaliser de manière sélective.


Remarque: commettre b327583 (Matthieu Moy moy, Avril 2014, pour git 2.0.x / 2.1, T3 2014) supprimera le S par défaut:

pager: supprime 'S' de $ LESS par défaut

Par défaut, Git définissait $LESS à -FRSX si $LESS n'a pas été défini par l'utilisateur.
  le FRX les drapeaux ont du sens pour Git (F et X parce que parfois les tuyaux de sortie Git à moins est court, et R parce que Git pipes couleur de sortie).
  le S En revanche, flag (couper les longues lignes) n'est pas lié à Git et dépend des préférences de l'utilisateur. Git ne devrait pas décider pour l'utilisateur de changer LESSpar défaut.

Plus précisément, le S Le drapeau nuit aux utilisateurs qui vérifient le code non fiable dans un pager, car un patch ressemblant à:

-old code;
+new good code; [... lots of tabs ...] malicious code;

semblerait identique à:

-old code;
+new good code;

Les utilisateurs qui préfèrent l'ancien comportement peuvent toujours définir la variable d'environnement $ LESS sur -FRSX explicitement, ou définissez core.pager sur 'less -S'.

La documentation indiquera:

L'environnement ne définit pas le S option mais la ligne de commande demande moins de tronquer les longues lignes.
  De même, le réglage core.pager à less -+F va désactiver le F option spécifiée par l'environnement à partir de la ligne de commande, désactivant le "quit if one screen" le comportement de less.
  On peut activer spécifiquement certains drapeaux pour des commandes particulières: par exemple, le réglage pager.blame à less -S active la troncature de ligne uniquement pour git blame.


56
2017-09-13 08:18



Vous pouvez également désactiver / activer les pagers pour des sorties spécifiques dans la configuration globale:

git config --global pager.diff false

Ou pour définir l'option core.pager, fournissez simplement une chaîne vide:

git config --global core.pager ''

C'est mieux à mon avis que de le mettre à cat comme tu dis.


30
2017-07-12 10:57



En ce qui concerne la couleur désactivée lors de la tuyauterie:

Utilisation --color pour éviter que la coloration soit désactivée.

git diff --color | less -R

Ou configurez-le de manière forcée (par exemple, .gitconfig):

[color]
        ui = on

git diff | less -R

Pour les outils non colorés, utilisez ensuite:

git diff --no-color | some-primitive-tool

Variable d'environnement exportant LESS=-R (par exemple .bashrc) active la prise en charge des couleurs par défaut dans "less":

git diff | less


8
2018-02-27 09:24



Cela a fonctionné pour moi avec git version 2.1.4 sous Linux:

git config --global --replace-all core.pager cat

Cela rend l'utilisation de git cat au lieu de less. cat jette juste la sortie de diff à l'écran sans aucune pagination.


7
2018-04-19 00:04



Vous pouvez ajouter un alias à diff avec son propre pager avec pager.alias, comme ceci:

[alias]
  dc = diff
  dsc = diff --staged
[pager]
  dc = cat
  dsc = cat

Cela gardera la couleur et utilisera 'cat' comme pagineur quand on l'invoque à 'git dc'.

Aussi, les choses ne pas faire:

  • utilisez --no-pager dans votre alias. Git (1.8.5.2, Apple Git-48) se plaindra que vous essayez de modifier l'environnement.
  • utilisez un shell avec! sh ou! git. Cela contournera l'erreur d'environnement, ci-dessus, mais réinitialisera votre répertoire de travail (pour les besoins de cette commande) au répertoire git de niveau supérieur, de sorte que les références à un fichier local ne fonctionneront pas si vous êtes déjà dans un sous-répertoire de votre repo.

5
2018-04-22 16:03



J'aime désactiver la pagination de temps en temps, quand je sais que la sortie n'est pas très longue. Pour cela, j'ai trouvé une astuce à l'aide d'alias git:

git config --global --add alias.n '!git --no-pager'

Ou ajoutez ce qui suit à [alias] section de ~ / .gitconfig:

n = !git --no-pager

Cela signifie que vous pouvez utiliser le préfixe n pour désactiver la pagination pour toute commande de git, à savoir:

git n diff # Show the diff without pager
git n log -n 3 # Show the last 3 commits without pager
git n show v1.1 # Show information about a tag

3
2018-02-09 10:12



Pour un script rapide et sale que j'ai écrit, je l'ai fait de cette façon:

PAGER=cat git diff ...

2
2017-11-24 20:59



Comme il est dit sur homme git, vous pouvez utiliser --no-pager sur n'importe quelle commande.

Je l'utilise sur:

git --no-pager diff
git --no-pager log --oneline --graph --decorate --all -n 10

Ensuite, utilisez un alias pour éviter d'utiliser (et de se souvenir) de longues commandes.


1
2018-04-27 03:40