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.
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
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"
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.
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'environnementLESS
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éfinircore.pager
à par exempleless -+S
.
Ceci sera transmis au shell par Git, qui traduira la commande finale enLESS=FRSX less -+S
. L'environnement indique à la commande de définir l'optionS
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
etGIT_PAGER
sans donner l'image globale de la priorité. Emprunter une meilleure description de lagit 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 drapeauxFRX
font réellement sens pour Git (F
etX
parce que parfois la sortie git pipes à moins est courte, etR
parce que git pipes coloré sortie).
LeS
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 changerLESS
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.pageurless -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éfinircore.pager
àless -+F
désactivera l'optionF
spécifiée par l'environnement à partir de la ligne de commande, désactivant le " "comportementquit if one screen
deless
.
On peut activer spécifiquement certains drapeaux pour des commandes particulières: par exemple, mettrepager.blame
àless -S
permet la troncature de ligne seulement pourgit blame
.
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.
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
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.
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.
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
pour un script rapide et sale que j'ai écrit, Je l'ai fait de cette façon:
PAGER=cat git diff ...
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.