Comment puis-je empêcher git diff d'utiliser un pager?

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

je sais que je peux le pipe à cat, mais cela supprime toute la mise en évidence de syntaxe.

je sais que je peux mettre le pager dans le global .gitconfig de chat par GITPAGER=cat (ou quelque chose comme ça); mais je veux avoir pager parfois (selon la taille de l'diff).

mais, je préférerais une commande le commutateur de ligne s'il y en a un; et je ne suis pas capable d'en trouver un, en parcourant les pages de manuel.

455
git
demandé sur Gray 2010-02-02 15:22:08

11 réponses

--no-pager dit à git de ne pas utiliser de pager. Le fait de passer l'option -F à moins lui indiquera de ne pas page si la sortie s'inscrit dans un seul écran.

Utilisation:

git --no-pager diff

D'autres options des commentaires comprennent:

# 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
506
répondu Ignacio Vazquez-Abrams 2018-05-31 22:15:38

comme une réponse précédente mentionnée, le fait de passer l'option -F à moins l'empêche de quitter si le contenu est inférieur à un écran, mais après avoir fait cela l'écran est réinitialisé et vous finissez par ne pas voir le contenu, l'option -X élimine ce comportement. Ainsi, j'utilise ce qui suit pour permettre le paging conditionnel basé sur la quantité de contenu:

git config --global --replace-all core.pager "less -F -X"
192
répondu ishaaq 2013-11-13 22:43:38

Utiliser

git config --global core.pager cat

pour se débarrasser de radiomessagerie pour toutes les commandes pour tous les référentiels.

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

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

119
répondu geekQ 2011-11-11 16:19:04

les récents changements 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 me colore diff avec Ctrl-C quitter less .

Wilson F mentionne dans les commentaires et dans sa question que:

supporte moins le défilement horizontal, de sorte que lorsque les lignes sont coupées, moins de désactivations abandonnent-si-un-écran de sorte que l'utilisateur peut toujours faire défiler le texte à gauche pour voir ce qui a été coupé.


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

visualiseur de texte à utiliser par les commandes Git (par exemple, 'less').

La valeur est censée être interprétée par le shell.

L'ordre de préférence est:

  • le $GIT_PAGER variable d'environnement
  • puis core.pager configuration,
  • puis $PAGER ,
  • et ensuite la valeur par défaut choisie au moment de la compilation (généralement 'less').

lorsque la variable d'environnement LESS est désactivée, Git la fixe à FRSX

(si la variable d'environnement LESS est définie, Git ne la change pas du tout).

si vous voulez modifier de façon 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 l'option S pour couper long lignes mais la ligne de commande la réinitialise par défaut pour plier les longues lignes.


Voir commettre 97d01f2a pour la raison derrière la nouvelle documentation libellé:

config: réécrire core.pager documentation

le texte mentionne core.pager et GIT_PAGER sans donner l'image globale de la priorité. Emprunter une meilleure description de la git var (1) documentation.

l'utilisation du mécanisme pour permettre des fichiers de configuration à l'échelle du système, globaux et par dépôt n'est pas limitée à cette variable particulière. Supprimer pour clarifier le paragraphe.

réécrire la partie qui explique comment la variable d'environnement LESS est définie à la valeur par défaut de Git, et comment la personnaliser de façon sélective.


Note: commit b327583 ( Matthieu Moy moy , avril 2014, pour git 2.0.x/2.1, T3 2014) va supprimer le S par défaut:

pager: supprimer le " S " à partir de $de MOINS par défaut

Par défaut, Git utilisé pour définir $LESS à -FRSX si $LESS n'a pas été définie par l'utilisateur.

Les drapeaux FRX font réellement sens pour Git ( F et X parce que parfois la sortie git pipes à moins est courte, et R parce que git pipes coloré sortie).

Le S drapeau (chop longues lignes), d'autre part, n'est pas liée à Git et est une question de préférence de l'utilisateur. Git ne doit pas décider pour l'utilisateur de changer LESS par défaut .

plus spécifiquement, le drapeau S nuit aux utilisateurs qui examine le code non fiable dans un pager, depuis un patch ressemblant à:

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

apparaîtrait identique à:

-old code;
+new good code;

les utilisateurs qui préfèrent l'ancien comportement peuvent encore définir la variable d'environnement $LESS à -FRSX explicitement, ou Définir core.pageur less -S ".

la documentation se lira:

le l'environnement ne définit pas l'option S mais la ligne de commande le fait, en donnant l'instruction à lesser de tronquer les longues lignes.

De même, le fait de définir core.pager à less -+F désactivera l'option F spécifiée par l'environnement à partir de la ligne de commande, désactivant le " "comportement quit if one screen de less .

On peut activer spécifiquement certains drapeaux pour des commandes particulières: par exemple, mettre pager.blame à less -S permet la troncature de ligne seulement pour git blame .

60
répondu VonC 2017-05-23 12:26:22

vous pouvez désactiver / activer des pageurs pour des sorties spécifiques dans la configuration globale ainsi:

git config --global pager.diff false

ou pour régler le noyau.option pager, il suffit de fournir une chaîne de caractères vide:

git config --global core.pager ''

C'est mieux, à mon avis, plutôt qu'à cat comme vous dites.

33
répondu mtahmed 2014-12-11 09:55:36

en ce qui concerne la couleur de la tuyauterie:

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

git diff --color | less -R

Ou le configurer forcé (dans, par exemple .gitconfig):

[color]
        ui = on

git diff | less -R

pour les outils non colorés, utiliser ensuite:

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

Exporter la variable d'environnement LESS=-R (dans, par exemple .bashrc) active le support des couleurs par défaut dans "less":

git diff | less

8
répondu StellarVortex 2012-02-27 09:24:32

cela a fonctionné pour moi avec la version 2.1.4 de Git sous Linux:

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

ce qui fait que git utilise cat au lieu de less . cat envoie simplement la sortie de diff à l'écran sans aucun appel.

7
répondu jcoffland 2015-09-17 10:07:18

vous pouvez ajouter un alias à diff avec son propre pager avec pager.alias, comme ça:

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

cela maintiendra la couleur et utilisera 'cat' comme pager lorsqu'il est invoqué à 'git dc'.

aussi, choses 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 !de poisson ou de !Git. Ceci contournera l'erreur d'environnement, ci-dessus, mais réinitialisera votre répertoire de travail (pour les besoins de cette commande) au niveau supérieur de Git dir, de sorte que toute référence à un fichier local ne fonctionnera pas si vous êtes déjà dans un sous-DIR de votre repo.
6
répondu Joseph Cheek 2014-04-22 16:03:28

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

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

ou ajouter ce qui suit à la section [alias] de ~/.gitconfig:

n = !git --no-pager

cela signifie que vous pouvez utiliser le préfixe n pour désactiver la pagination pour toute commande git, i.e.:

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
répondu daniel kullmann 2016-02-11 09:06:21

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

PAGER=cat git diff ...
2
répondu Roberto Bonvallet 2015-11-24 20:59:36

comme il est dit sur man 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

puis utilisez un alias pour éviter d'utiliser (et de se rappeler) des commandes longues.

1
répondu Is Ma 2018-04-27 03:40:44